Python 不一致的pool.map行为

Python 不一致的pool.map行为,python,python-multiprocessing,python-pool,Python,Python Multiprocessing,Python Pool,我正在使用python使用以下代码测试一个非常简单的工作池: from multiprocessing import Pool from itertools import cycle def do_stuff(work): core = work[0] inp = work[1] print('Running: "{}" "{}"'.format(core, inp)) def main(): num_cores = 4 jobs = ['a', 'b

我正在使用python使用以下代码测试一个非常简单的工作池:

from multiprocessing import Pool
from itertools import cycle

def do_stuff(work):
    core = work[0]
    inp = work[1]
    print('Running: "{}" "{}"'.format(core, inp))

def main():
    num_cores = 4
    jobs = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    with Pool(num_cores) as pool:
        work = list(zip(cycle(range(0, num_cores)), jobs))
        pool.map(do_stuff, work)

if __name__ == "__main__":
    main()
当作业数组大小小于16时,它会执行我期望它执行的操作(在第一列上循环):

奇怪的是:当列表中有16+个元素时,它几乎开始任意分配作业。例如:

jobs=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','a','b','c','d','e','f','g','h','i','j','k','l','m']

我得到:

Running: "0" "a"
Running: "2" "c"
Running: "0" "e"
Running: "2" "g"
Running: "1" "b"
Running: "3" "d"
Running: "1" "f"
Running: "3" "h"
Running: "0" "i"
Running: "2" "k"
...
...
这完全搞乱了我的设置。你知道为什么会这样吗?有没有一种方法可以强制执行pool.map使用的分发模式


提前谢谢

啊!我想出来了
pool.map
有第三个参数“chunksize”,这正是我需要的。当我将其设置为1(
pool.map(dou stuff,work,1)
)时,我得到了所需的行为和速度:)

到底是什么问题?任务执行的顺序是什么
pool.map
不保证任何此类排序。首先,您根本没有实际检查工作分配到核心。其次,这并不重要——如果真的重要,
多处理
是不够的。第三,您似乎想要顺序执行,但这完全违背了使用多处理或任何类型的并行的意义。
Running: "0" "a"
Running: "2" "c"
Running: "0" "e"
Running: "2" "g"
Running: "1" "b"
Running: "3" "d"
Running: "1" "f"
Running: "3" "h"
Running: "0" "i"
Running: "2" "k"
...
...