【发布时间】:2017-11-27 14:39:34
【问题描述】:
版本:
- 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 文件将一堆内容添加到数据库中。偶尔,我需要重置所有内容,并从这些文件中重新添加所有内容。此外,数据一旦添加,还需要进行一些后处理。然而,这需要一段时间,因为文件很长,并且代码中存在一些不可避免的双循环以及许多数据库查询。
在许多情况下,任务是独立的,因此它们应该可以并行运行。我四处寻找并行处理库并决定使用非常简单的multiprocessing。
因此,设置非常简单。我们定义一些函数并行运行,然后调用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])
但是,运行代码会导致数据库连接错误,如报告here、here、here:
_mysql_exceptions.OperationalError: (2013, 'Lost connection to MySQL server during query')
似乎不同的线程/内核正在尝试共享一个连接,或者该连接未传递给工作人员。
如何获得并行处理以使用 Django 数据库操作?
【问题讨论】:
标签: python mysql django parallel-processing