【问题标题】:How to do multiprocessing with a Django management command?如何使用 Django 管理命令进行多处理?
【发布时间】:2019-11-08 10:17:47
【问题描述】:
我有一个可以运行的 Django 管理命令:“python manage.py updateprices”并执行以下查询:
activos = SearchTag.objects.filter(is_active=True)
我想将这样的命令拆分到我的数据库的较小块中
e.g. activos[0:2000] 同时进行,所以我加快了进程
我该怎么做?
【问题讨论】:
标签:
python
django
python-multiprocessing
python-multithreading
【解决方案1】:
如果我理解正确,我认为您是在谈论按组进行数据库查询。
所以首先,你应该创建一个列表(可迭代)
q_list = []
active_q = SearchTag.objects.filter(is_active=True)
# start from 0 and make jumps of 2,000. so if you have 20,000 rows you would have a list containing 10 querysets of 2000 rows each
for i in range(0, active_q.count(), 2000):
q_list.append(active_q[i:i+2000])
现在您有了要对其进行操作的项目列表,您可以轻松地将其传递给池
from multiprocessing import cpu_count, Pool
pool = Pool(processes=cpu_count())
pool.map(function_on_each_q, q_list)
显然你需要创建函数来做任何你想做的事情:
def function_on_each_q(q_list):
# DO WHATEVER WITH q_list