Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我们运行许多任务时,python多处理池不工作_Python_Python 3.x_Multiprocessing_Python Multiprocessing - Fatal编程技术网

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

当我们运行许多任务时,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个文件

示例:我有一个带有两个线程的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个文件,对吗

但是当我运行很多文件时,我发现了这个问题。(可能超过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
强制执行。