python - 在多线程 Python 应用程序中最小化 MySQL 连接开销的正确方法是什么?

标签 python mysql multithreading mysql-python python-multiprocessing

<分区>

我正在使用 Python 的多处理包来设置工作线程来完成工作并将结果更新到 MySQL 数据库。正确的设置方法是什么,这样每次初始化工作线程时都不会重新建立数据库连接?

最佳答案

每个线程必须使用自己独立的连接。

MySQL 协议(protocol)不是无状态的(例如 http)。如果您尝试在多个线程之间使用单个 MySQL 连接,服务器会对它正在响应的请求感到困惑,并且客户端线程也会感到困惑,因为错误的线程可能会读取响应。

对于任何其他有状态协议(protocol)也是如此,例如 ftp。

减少开销的更好方法是使用 a connection pool .每个线程在线程初始化时请求一个连接,池管理器从池中分配线程独占使用其中一个连接,直到线程用完它。然后它将连接返回到池中,它将被分配给另一个请求连接的线程。

更好的是让线程不在线程初始化时请求连接,而是在稍后它实际需要做一些数据库工作时请求连接。然后在数据库工作完成后释放连接。如果从池中请求连接的开销非常低,则没有理由在线程的生命周期内保持连接。

最好是分享!

关于python - 在多线程 Python 应用程序中最小化 MySQL 连接开销的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065353/

相关文章:

python - numpy 中的 FFT 与 MATLAB 中的 FFT 没有相同的结果

php - Moodle flexible_table 第一行显示为空

multithreading - 戈朗 : can WaitGroup leak with go-routines

python - 将来自多个小部件的相同信号连接到 PyQt 中的同一函数?

Python 请求模块未从 Web 服务器获取最新数据

c# - 如何只计算字符串中的字母?

MySQL 电子邮件比较和取消订阅不发送列表

c# - 在 ASP.NET 中 ConfigureAwait(false) 的行为是什么?

c++ - C++中有没有办法同时在多个线程上调用join?

python - reportlab 不同的下一页