python - 理解 python 中的数据库连接池

标签 python database multithreading connection-pooling fork

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

最佳答案

基思,

您走在正确的轨道上。如 S.O 帖子“Accessing a MySQL connection pool from Python multiprocessing”中所述,“:

Making a seperate pool for each process is redundant and opens up way
too many connections.

查看其他 S.O 帖子“What is the best solution for database connection pooling in python?”,它包含一个 python 中的示例池解决方案。如果您的应用程序成为多线程,这篇文章还讨论了 db-pooling 的局限性:

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.

就在 python 中实现数据库池而言,如“Application vs Database Resident Connection Pool”中所述,如果您的数据库支持它,最好的实现包括:

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.

如有任何问题,请告诉我!

关于python - 理解 python 中的数据库连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26266842/

相关文章:

python - Flake8 错误 : E712 comparison to True should be 'if cond is True:' or 'if cond:'

php - 面临将值放入聊天页面 php 的问题

python - ftp 未传输完整文件

python - 如何使用 Pandas 数据框创建一个矩阵,该矩阵是多个矩阵的总和?

java - 我如何更快地获得 MongoDB 中的等效函数? WHERE 子句?

node.js - 获取 react 照片库中图像的链接?

multithreading - 在线程中使用TADOQuery

java - 多线程应用程序在 3 天后停止

java - 在服务于 Socket 连接的两个线程之间共享公共(public)数据

python - 如果没有返回异常,则传递异常并引发错误的方法