首页 > 解决方案 > 池未使用全部处理器容量

问题描述

我正在使用 Python3 的multiprocessing库,以便我可以在我的大学集群上执行我的代码。虽然我注意到 aPool没有以最好的方式分配工作,但我正在寻找一种方法来避免这种情况。例如在这段代码中:

>>> from time import sleep
>>> import multiprocessing as mp
>>> 
>>> def f(i):
...     if i == 0:
...             sleep(4)
...     print(i, end='\t')
... 
>>> with mp.Pool(2) as pool:
...     _ = pool.map(f, range(100))
... 
13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99  0   1   2   34  5   6   7   8   9   10  11  12  

我们可以看到,与其他 99 个任务相比,第一个任务需要花费大量时间,但仍然有一个Process负责 12 个第一个任务。这意味着进程#2 将执行任务 13 -> 99,然后等待进程#1 完成(因此处理 1 -> 12)。这显然不是最优的,因为进程#1 在进程#2 完成任务 1 之前完成。

有没有办法强制 Process #1 只要有一些任务可用就继续执行任务,即在这种情况下强制任务 2 -> 12 在 Process #2 上执行?

我尝试调整chunksize参数,有点帮助(例如将其设置为 2 强制进程 #1 执行任务 3 -> 12),但这仍然不是最佳的。

标签: pythonmultiprocessingthreadpool

解决方案


推荐阅读