Python Django和并行处理:
版本:Python Django和并行处理:,python,mysql,django,parallel-processing,Python,Mysql,Django,Parallel Processing,版本: Python 3.5.1 Django 1.10 mysqlclient 1.3.10 mysql 5.7.18-0ubuntu0.16.04.1(Ubuntu) Linux Mint 18.1 我有一个大型Django项目,其中有一个安装脚本,可以从一些csv文件向数据库添加一组内容。偶尔,我需要重置所有内容,并重新添加这些文件中的所有内容。此外,一旦添加数据,还需要进行一些后处理。但是,这需要一段时间,因为文件很长,代码中不可避免地存在一些双循环以及许多数据库查询 在许多情况下,
- Python 3.5.1
- Django 1.10
- mysqlclient 1.3.10
- mysql 5.7.18-0ubuntu0.16.04.1(Ubuntu)
- Linux Mint 18.1
Pool
。简化代码:
def some_func(input):
#code inserting data into Django here
pass
with Pool(4) as p:
p.map(some_func, [1, 2, 3, 4])
但是,运行代码会导致数据库连接错误,如报告的:
看起来不同的线程/内核试图共享一个连接,或者该连接没有传递给工作线程
如何让并行处理与Django数据库操作一起工作?在谷歌搜索之后,我找到了一个与(2009)相关的老问题: 您好,我最近正在调试类似的问题,并得出了一个结论 (这当然可能是错误的:)多处理和Django DB 关系网不能很好地配合。我最终关闭了Django DB 连接是新流程中的第一件事。它将重新创造一个新的世界 当它需要一个连接时,但该连接将没有对的引用 父级使用的连接 因此,我的
Process.start()
调用一个以以下内容开头的函数:
从django.db导入连接
connection.close()
这解决了我的问题
因此,要解决此问题,请将函数更改为以下内容:
def some_func(input):
#kill old database connection
from django.db import connection
connection.close()
#code inserting data into Django here
pass
然后它工作得很好
def some_func(input):
#kill old database connection
from django.db import connection
connection.close()
#code inserting data into Django here
pass