当我们运行许多任务时,python多处理池不起作用

时间:2018-08-20 23:32:39

标签: python python-3.x multiprocessing python-multiprocessing

示例:我有一个带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。

1 个答案:

答案 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