这个问题在这里已经有答案了:
python中数据库连接池的最佳解决方案是什么(8个答案)两年前关门了。我使用python的多处理包来设置工作线程来完成工作,并将结果更新到mysql数据库。什么是正确的设置方法,以便在每次初始化工作线程时都不会重新建立数据库连接?
jobtbby31#
每个线程必须使用自己的独立连接。mysql协议不是无状态的(比如http)。如果您尝试在多个线程之间使用一个mysql连接,服务器会对响应的请求感到困惑,而客户机线程会感到困惑,因为错误的线程可能会读取响应。对于任何其他有状态协议(例如ftp)也是如此。减少开销的更好方法是使用连接池。每个线程在线程的初始化中请求一个连接,池管理器为线程分配池中一个连接的独占使用权,直到线程处理完它为止。然后它将连接返回到池,在那里它将被分配给另一个请求连接的线程。更好的方法是让线程请求一个连接,而不是在线程初始化时,而是在以后,当它实际需要做一些数据库工作时。然后在数据库工作完成后释放连接。如果从池请求连接的开销非常低,那么就没有理由在线程的生命周期内保持连接。最好是分享!
1条答案
按热度按时间jobtbby31#
每个线程必须使用自己的独立连接。
mysql协议不是无状态的(比如http)。如果您尝试在多个线程之间使用一个mysql连接,服务器会对响应的请求感到困惑,而客户机线程会感到困惑,因为错误的线程可能会读取响应。
对于任何其他有状态协议(例如ftp)也是如此。
减少开销的更好方法是使用连接池。每个线程在线程的初始化中请求一个连接,池管理器为线程分配池中一个连接的独占使用权,直到线程处理完它为止。然后它将连接返回到池,在那里它将被分配给另一个请求连接的线程。
更好的方法是让线程请求一个连接,而不是在线程初始化时,而是在以后,当它实际需要做一些数据库工作时。然后在数据库工作完成后释放连接。如果从池请求连接的开销非常低,那么就没有理由在线程的生命周期内保持连接。
最好是分享!