示例:我有一个带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等工人。
如何解决此问题?
谢谢大家。
P.S。我使用的是Python 3.6。
答案 0 :(得分:1)
您可以指定池中的工作进程数,将其作为参数传递给\.
。
示例:
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