首页 > 解决方案 > 当我们运行许多任务时,python 多处理池不起作用

问题描述

示例:我有一个带有 2 个线程的 CPU,所以我有 2 个工作人员使用此代码。

tasks = ['1.txt', '2.txt', '3.txt', '4.txt', '5.txt']

pool = multiprocessing.Pool()
pool.map(myfunc, tasks, chunksize=1)
pool.close()
pool.join()

如果我运行这个程序,它将首先处理“1.txt”和“2.txt”,然后当其中一个完成工作时,它将开始下一个文件。这意味着它一次只处理 2 个文件,对吧?

但是当我运行许多文件时,我发现了问题。(可能超过 100 多个文件)。程序不会等到 2 名工人中的一名完成工作,而是将工作分配给工人 3、4、5、6、7、8、9 等。

我该如何解决这个问题?

提前谢谢大家。

PS我使用Python 3.6。

标签: pythonpython-3.xmultiprocessingpython-multiprocessing

解决方案


您可以指定池中的工作进程数,将其作为参数传递给multiprocessing.Pool().

例子:

import multiprocessing
import time

def myfunc(t):
    print("{} starts".format(t))
    time.sleep(1)
    print("{} ends".format(t))

tasks = ['1.txt', '2.txt', '3.txt', '4.txt', '5.txt']

pool = multiprocessing.Pool(processes=2)
pool.map(myfunc, tasks, chunksize=1)
pool.close()
pool.join()

在我的机器上输出

1.txt starts
2.txt starts
1.txt ends
3.txt starts
2.txt ends
4.txt starts
3.txt ends
5.txt starts
4.txt ends
5.txt ends

虽然没有指定工作进程的数量,但我得到的是:

1.txt starts
2.txt starts
3.txt starts
4.txt starts
3.txt ends
1.txt ends
2.txt ends
4.txt ends
5.txt starts
5.txt ends

推荐阅读