在python中实现多处理的一种简单方法是
from multiprocessing import Pool
def calculate(number):
return number
if __name__ == '__main__':
pool = Pool()
result = pool.map(calculate, range(4))
Run Code Online (Sandbox Code Playgroud)
基于期货的另一种实现方式是
from concurrent.futures import ProcessPoolExecutor
def calculate(number):
return number
with ProcessPoolExecutor() as executor:
result = executor.map(calculate, range(4))
Run Code Online (Sandbox Code Playgroud)
两种替代方案基本上都是相同的,但一个显着的区别是我们不必使用通常的if __name__ == '__main__'条款来保护代码.这是因为期货的实施照顾了这个还是我们有不同的原因?
更广泛地说,multiprocessing和之间有什么区别concurrent.futures?什么时候优先于另一个?
编辑:我最初假设防护if __name__ == '__main__'只是多处理所必需的是错误的.显然,对于Windows上的两种实现都需要这种保护,而在unix系统上则没有必要.