使用Python多处理的问题Pool.map()在Python 3.7.2中变得棘手,但在3.6.2中很快完成

时间:2019-02-03 19:32:08

标签: python multiprocessing

我刚刚从3.6.2-> 3.7.2升级了Python,并且multiprocessing库遇到问题。我在Django应用程序中使用它,该应用程序在worker函数中使用了特定于Django的函数(请参见下文)。

在我的代码中,我有以下内容:

import multiprocessing as mp
from django_app import models

def worker_function(value):
    models.Value.objects.get_or_create(value=value)

if __name__ == "__main__":
    list_of_values = [value_1, value_2, ..., value_n]

    with mp.Pool() as pool:
        pool.map(worker_function, list_of_values)

特别是对于我的应用程序,此任务通常在150-200秒内运行。

但是,在升级到Python 3.7.2之后,该进程会无限期挂起,尽管我可以证明我的CPU使用率大幅上升。

切换回3.6.2,一切恢复正常。

我知道多处理问题很难诊断,但是我希望我只是在某处错过了备忘录?

注意:我没有在3.6.23.7.2

以外的任何其他Python版本上尝试过此操作

更新:作为一种快速的诊断方法,我将worker函数更改为仅打印该值:

def worker_function(value):
    print(value)

在此过程中未打印任何值

0 个答案:

没有答案