我逃离How can I recover the return value of a function passed to multiprocessing.Process?以下解决方案:为什么多处理在同一个进程中运行的东西?
import multiprocessing
from os import getpid
def worker(procnum):
print('I am number %d in process %d' % (procnum, getpid()))
return getpid()
if __name__ == '__main__':
pool = multiprocessing.Pool(processes = 3)
print(pool.map(worker, range(5)))
这是应该的输出是这样的:
I am number 0 in process 19139
I am number 1 in process 19138
I am number 2 in process 19140
I am number 3 in process 19139
I am number 4 in process 19140
[19139, 19138, 19140, 19139, 19140]
而是我只得到
[4212, 4212, 4212, 4212, 4212]
如果我喂pool.map我使用了10个以上的流程,最多使用两个不同的pid,范围为1,000,000。
为什么我的副本multiprocessing
似乎在同一个过程中运行一切?
你从这个例子中得到了什么样的例子?真正的情况是,要执行的代码的速度非常快,以至于强迫它在多个线程之间分割工作没有任何好处。 – Makoto
在我的机器上,我相当一致地获得了所有pid的例子,并且在10个进程中执行了100个任务。所以这似乎有些依赖于上下文。 – Mark
请注意['map'方法](https://docs.python.org/3.5/library/multiprocessing.html#multiprocessing.pool.Pool.map)也有一个'chunksize'参数可以用来修复发送给子进程的块的大小。所以你可以通过将'chunksize'设置为更小的值来改变行为。在任何情况下:'Pool'都是一种简单的方式来分配任务,你不关心谁执行它们等等。它的默认设置应该可以在几乎所有的情况下工作,所以不用担心这直到你发现一个真正的问题与演出...... – Bakuriu