python - 为什么map_async()不需要pool.close()和pool.join()?

标签 python multiprocessing pool

我写了下面的代码

import multiprocessing as mp
import time


#
def f(x) :
    time.sleep(0.1)
    return pow( x, 2 )

#
my_chunksize = 10

#
if __name__ == '__main__':

    #
    po = mp.Pool( processes=2 )
    po_res = po.map_async( f, range(100), my_chunksize )

    #po.close()
    #po.join()

    #
    print po_res.get()

这工作正常。为什么不需要 po.close()po.join() ?为什么主进程没有在子进程之前终止?

最佳答案

你的最终结果:

print po_res.get()

语句会阻塞主程序,直到map_async()完全完成。 .get() 会阻塞,等待整个结果列表可用。直到传递给 map_async() 的所有工作都完成并且所有结果都返回到主程序之前,这种情况才会发生。

注释掉该语句,您将看到您的程序很快退出。

也就是说,无论如何,最好的做法是使用 .close().join()

关于python - 为什么map_async()不需要pool.close()和pool.join()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22265278/

相关文章:

python - 为什么在 Python 中从多个进程写入文件时我的文件没有损坏?

java - 如果存在强引用,保证返回现有对象的线程安全对象池?

Python:如何在多处理池中使用值和数组

java - 在 GenericObjectPool 中创建对象

python - 持续处理来自 PostGres 数据库的数据——采用什么方法?

python - 不能使用 bot.run ('TOKEN' ) - Discord.py

Python3.4 : OSError: [Errno 12] Cannot allocate memory

python - 如何解压嵌套列表中的元组?

带换行符的字符串的Python格式

Python:TypeError:出于安全原因,不允许 Pickling AuthenticationString 对象