<分区>
我正在使用 Python 的多处理包来设置工作线程来完成工作并将结果更新到 MySQL 数据库。正确的设置方法是什么,这样每次初始化工作线程时都不会重新建立数据库连接?
<分区>
我正在使用 Python 的多处理包来设置工作线程来完成工作并将结果更新到 MySQL 数据库。正确的设置方法是什么,这样每次初始化工作线程时都不会重新建立数据库连接?
最佳答案
每个线程必须使用自己独立的连接。
MySQL 协议(protocol)不是无状态的(例如 http)。如果您尝试在多个线程之间使用单个 MySQL 连接,服务器会对它正在响应的请求感到困惑,并且客户端线程也会感到困惑,因为错误的线程可能会读取响应。
对于任何其他有状态协议(protocol)也是如此,例如 ftp。
减少开销的更好方法是使用 a connection pool .每个线程在线程初始化时请求一个连接,池管理器从池中分配线程独占使用其中一个连接,直到线程用完它。然后它将连接返回到池中,它将被分配给另一个请求连接的线程。
更好的是让线程不在线程初始化时请求连接,而是在稍后它实际需要做一些数据库工作时请求连接。然后在数据库工作完成后释放连接。如果从池中请求连接的开销非常低,则没有理由在线程的生命周期内保持连接。
最好是分享!
关于python - 在多线程 Python 应用程序中最小化 MySQL 连接开销的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065353/