我有一些使用multiprocessing
模块和 Django ORM 的脚本。场景很简单:
- 获取数据,
- 创建 n 个进程并将一部分数据分配给每个进程,
- 做一点事,
- 使用 Django ORM 保存到数据库中。
好吧,在第 4 步中,我遇到了 Django 没有将所有数据保存在数据库中的问题。准备数据的函数是正确和检查的,但我不知道Django的问题在哪里。在创建进程之前,关闭旧连接,以便每个进程都可以拥有自己的连接。
Django 和多处理是否有问题,或者最大连接数(我最多使用 4 个进程)?
示例代码:
connection.close() #part 我调用函数“fun”,并发送数据 p = Process(target=fun, args=(i, data,)
def fun(i, data):
result_1 = some_other_fun(data) #this is list
result_2 = some_other_fun2(data) #this is model specified in models.py
save_data(result_1, result_2)
def save_data(res1, res2):
for row in res1:
res1.fk_to_another_table = res2
res1.some_info = func()
res1.save()
长话短说。如果我从 Process 调用 save_data,save() 方法不会在表中保存行。如果在不使用 Process 的情况下调用该方法(只是正常调用脚本),则一切正常。