【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2021-02-10
      • 2020-06-11
      • 1970-01-01
      • 2013-10-12
      • 2012-12-28
      • 2016-03-22
      相关资源
      最近更新 更多