Python中的Pool.apply_async函数按顺序打印数字

时间:2018-08-31 07:43:12

标签: python

此问题与Pool apply_async函数有关。 这个函数不应该异步调用其他函数吗?

代码:

import multiprocessing as mp

def foo_pool(x): return x

result_list = []

def log_result(result): result_list.append(result)

def apply_async_with_callback():
    pool = mp.Pool()
    for i in range(10):
        pool.apply_async(foo_pool, args = (i, ), callback = log_result)
    pool.close()
    pool.join()
    print(result_list)

if __name__ == '__main__':
    apply_async_with_callback()

运行这段代码一段时间后,我会不断获得此打印信息:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

为什么要按顺序排列?输出有时会不会出现故障?

1 个答案:

答案 0 :(得分:3)

您的函数过快,并且执行时间恒定...因此一切顺其自然。

尝试添加

time.sleep(random.random())

进入您的foo_pool可以看到一些异步性。