如何在Python多处理中共享DB连接池?



我正在使用多处理。池来执行一些函数。在函数中,我需要连接到数据库(使用sqlalchemy)。我尝试通过使用multiprocessing将sqlalchemy连接池共享给子进程。队列,像这样:

from multiprocessing import Pool, Manager
def process(data, queue):
db = queue.get()
with db.connect() as connection:
# execute some query
data_list = [] # list of data I'm going to deal with
pool = Pool(8)
manager = Manager()
queue = manager.Queue()
db = sqlalchemy.create_engine()
for data in data_list:
queue.put(db)
pool.apply_async(func=process, args=(data, db)) # This is 1st way I try
pool.apply_async(func=process, args=(data, queue)) # This is 2nd way I try

我尝试了这两种方法,但它们都引发错误。

第一种方法将在执行with db.connect() as connection时引发Broken Pipe Error

第二种方法会引发Can't pickle local object 'create_engine.<locals>.connect'错误。

我搜索了这个问题,发现有些人说共享连接池到子进程是可行的,但是我应该如何与多进程共享引擎?

正如@charchit的评论,这里是关于使用sqlalchemy和multiprocessing的文档

相关内容

  • 没有找到相关文章

最新更新