当我们运行许多任务时,python多处理池不工作
示例:我有一个带有两个线程的CPU,因此我有两个工人使用此代码当我们运行许多任务时,python多处理池不工作,python,python-3.x,multiprocessing,python-multiprocessing,Python,Python 3.x,Multiprocessing,Python Multiprocessing,示例:我有一个带有两个线程的CPU,因此我有两个工人使用此代码 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个文件
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多个文件)。程序不会等到两个工人中的一个完成工作,但会将工作分配给工人3、4、5、6、7、8、9,依此类推
我如何解决这个问题
提前谢谢大家
另外,我使用Python 3.6。您可以指定池中的工作进程数,并将其作为参数传递给
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
你能给我们一个答案和/或更好地解释问题吗?如果你有两个核心,那么不应该有超过两个工人。如果您担心这个问题,可以检查它,或者直接通过
2
强制执行。