【发布时间】:2019-07-31 14:15:35
【问题描述】:
我需要同时在多个进程中运行 SQL 查询。这些进程可以使用完全不同的数据库,因此不需要跨进程共享任何内容。在每个进程中,我创建一个连接到唯一数据库的引擎并尝试连接到该数据库。 sqlalchemy 总是无法在至少一个进程中建立数据库连接。
我已将代码缩减为仅创建一个引擎并在每个进程中建立与该引擎的连接。每个引擎都是在一个流程中建立的,而不是共享的。每个连接都是如此。数据库也是唯一的,所以锁应该不是问题。但是,一个进程总是无法与其数据库建立连接。
import multiprocessing as mp
import sqlalchemy
def testing(iteration):
engine = sqlalchemy.create_engine('sqlite:///test_db_{}'.format(iteration),
echo = True)
print("Created engine for iteration {}".format(iteration))
with engine.connect() as conn:
print("Established database connection for iteration {}".format(iteration))
pool = mp.Pool(4)
results = pool.map(testing, range(4))
pool.close()
pool.join()
输出应该如下(尽管不一定按照这个确切的顺序):
Created engine for iteration 0
Created engine for iteration 1
Created engine for iteration 2
Created engine for iteration 3
Established database connection for iteration 0
Established database connection for iteration 1
Established database connection for iteration 2
Established database connection for iteration 3
但是,我从来没有看到“为迭代 0 建立数据库连接”并且程序挂起。
这是 sqlalchemy 的普遍问题吗?它是sqlite特有的吗?还是我完全错过了什么?感谢您的帮助。
【问题讨论】:
标签: python sqlite sqlalchemy multiprocessing