python mysql连接池_连接池 – python中的MySQL连接池?

我正在尝试使用

Python处理大量数据并在MySQL中维护处理状态.但是,我很惊讶没有python-mysql的标准连接池(比如Java中的HikariCP).

我最初是从PyMySQL开始的,在程序运行前几个小时之前一切都很棒.几个小时后,事情开始失败.我遇到了很多错误:

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 99] Cannot assign requested address)")

此外,很多端口都处于TIME_WAIT状态,因为由于缺少连接池,我太频繁地打开和关闭连接

/d/p/950 ❯❯❯ netstat -nt | wc -l

84752

根据this和this,我尝试设置tcp_fin_timeout和ip_local_port_range,但几乎没有任何改进.

echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

echo 15000 65000 > /proc/sys/net/ipv4/ip_local_port_range

然后我发现MySQL提供了带有pooling功能的mysql.connector.在做完所有这些表现后实际上恶化了.更多流程开始失败.我正在使用Python的多处理模块在24核机器上同时运行29个进程(多处理.Pool默认选择此项).以下是代码,当然我使用.my.cnf传递所有凭据以避免将它们提交给git:

import mysql.connector

from mysql.connector import pooling

conn_pool = pooling.MySQLConnectionPool(pool_name="mypool1",

pool_size=pooling.CNX_POOL_MAXSIZE,

option_files=MYSQL_CONFIG,

option_groups=MYSQL_GROUP_NODE1,

allow_local_infile=True)

conn = conn_pool.get_connection()

最后,还原为旧代码.仍在使用PyMySQL,虽然错误较少,但它仍然是一个重大问题.我查看了SQLAlchemy,并没有真正找到关于池的文档.

我想知道其他人如何处理mysql-python连接池问题?我真的相信应该有一些东西,所以我不必重新发明轮子.

任何指针都非常感激.