Django:线程池和 TooManyConnections

Posted

技术标签:

【中文标题】Django:线程池和 TooManyConnections【英文标题】:Django: ThreadPool and TooManyConnections 【发布时间】:2020-10-20 13:17:39 【问题描述】:

上下文:Django(3) 命令、mysql

from django.db import connections

...
def func1(a):
    with connections['second_db'].cursor() as cursor:
        cursor.execute(statement)

def func2(b):
    with connections['second_db'].cursor() as cursor:
        cursor.execute(statement)

for ...:
    pool = ThreadPool(processes=2)
    result1_proc = pool.apply_async(func1, args=(a))
    result2_proc = pool.apply_async(func2, args=(b))
    pool.close()
    pool.join()

有时我会从服务器收到“连接太多”错误。 如果我在每个函数的末尾添加“connections['second_db'].close()”,我会得到“django.db.utils.InterfaceError: (0, '')”。 怎么了?

【问题讨论】:

【参考方案1】:

Too many connections 是 MySQL 错误,而不是 django 错误。 您可以更新参数:

# vi /etc/my.cnf
max_connections = 512

参考:https://www.thegeekdiary.com/mysql-error-too-many-connections-and-how-to-resolve-it/

【讨论】:

我想解决问题,而不是解决症状。线程死亡时不应该关闭连接吗? 我在您的样本中看到了“for”,确实,要分析根本原因。我看到了这个(你可能也看到了)***.com/questions/5504340/…:似乎需要关闭游标......你在每个 cursor.execute() 之后尝试过 "cursor.close()" 吗?

以上是关于Django:线程池和 TooManyConnections的主要内容,如果未能解决你的问题,请参考以下文章

使用线程池和单线程

池和回调函数

线程Queue定时器进程池和线程池同步异步

线程池和异步线程

线程池和异步线程

JDK线程池和Spring线程池的使用