在 python 中实现多处理的一种简单方法是
from multiprocessing import Pool
def calculate(number):
return number
if __name__ == '__main__':
pool = Pool()
result = pool.map(calculate, range(4))
基于期货的替代实现是
from concurrent.futures import ProcessPoolExecutor
def calculate(number):
return number
with ProcessPoolExecutor() as executor:
result = executor.map(calculate, range(4))
两种选择基本上做同样的事情,但一个显着的区别是我们不必用通常的if __name__ == '__main__'
子句来保护代码。这是因为期货的实施解决了这个问题还是我们有不同的原因?
multiprocessing
更广泛地说,和之间有什么区别concurrent.futures
?什么时候优先于另一个?
编辑:我最初的假设是,守卫if __name__ == '__main__'
只对多处理是必需的,这是错误的。显然,Windows 上的两种实现都需要这种保护,而在 unix 系统上则不需要。