了解python中的数据库连接池

Kei*_*ith 4 python database multithreading fork connection-pooling

我不确定我是否了解python中数据库连接池的用例(例如:psycopg2.pool和mysql.connector.pooling)。在我看来,由于GIL,并行性通常是在python中使用多进程而不是多线程方法实现的,并且在多进程情况下,这些池不是很有用,因为每个进程都会初始化自己的池并且一次只能运行一个线程。它是否正确?使用多个进程时,是否有任何共享数据库连接池的策略?如果不是,则池的有用性仅限于多线程python应用程序,或者是否存在使用它们的其他方案?

Dev*_*sai 5

基思

您走在正确的轨道上。如SO帖子“ 从Python多重处理访问MySQL连接池 ”中所述:

Making a seperate pool for each process is redundant and opens up way
too many connections.
Run Code Online (Sandbox Code Playgroud)

查看另一篇SO文章“ 什么是python中数据库连接池的最佳解决方案? ”,其中包含python中的示例池解决方案。如果您的应用程序要成为多线程,这篇文章还讨论了数据库池的限制:

Making your own connection pool is a BAD idea if your app ever decides to start using 
multi-threading. Making a connection pool for a multi-threaded application is much 
more complicated than one for a single-threaded application. You can use something 
like PySQLPool in that case.
Run Code Online (Sandbox Code Playgroud)

如“ 应用程序与数据库常驻连接池 ”中所述,在python中实现数据库池的术语,如果您的数据库支持,则最佳实现将涉及:

Let connection pool be maintained and managed by database itself 
(example: Oracle's DRCP) and calling modules just ask connections from the connection 
broker described by Oracle DRCP.
Run Code Online (Sandbox Code Playgroud)

请让我知道,如果你有任何问题!