在 Python 中用于多处理的子句



在python 3中,你现在可以像这样使用with子句安全地打开文件:

with open("stuff.txt") as f:
data = f.read()

使用这种方法,我不需要担心关闭连接

我想知道我是否可以对多处理做同样的事情。例如,我当前的代码如下所示:

pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
pool.starmap(function,list)
pool.close()
pool.join()

有什么方法可以使用 with 子句来简化这一点吗?

with multiprocessing.Pool( ... ) as pool:
pool.starmap( ... )

https://docs.python.org/3/library/multiprocessing.html#multiprocessing.pool.Pool

版本 3.3 中的新功能:池对象现在支持上下文管理协议 – 请参阅上下文管理器类型。enter(( 返回池对象,exit(( 调用 terminate((。

您可以在Pool部分的底部看到一个示例。

虽然它比OP要求的要多,但如果你想要一些同时适用于Python 2和Python 3的东西,你可以使用:

# For python 2/3 compatibility, define pool context manager
# to support the 'with' statement in Python 2
if sys.version_info[0] == 2:
from contextlib import contextmanager
@contextmanager
def multiprocessing_context(*args, **kwargs):
pool = multiprocessing.Pool(*args, **kwargs)
yield pool
pool.terminate()
else:
multiprocessing_context = multiprocessing.Pool

之后,您可以使用常规Python 3方式进行多处理,无论您使用的是哪个版本的Python。例如:

def _function_to_run_for_each(x):
return x.lower()
with multiprocessing_context(processes=3) as pool:
results = pool.map(_function_to_run_for_each, ['Bob', 'Sue', 'Tim'])   
print(results)

现在,这将在Python 2或Python 3中工作。

相关内容

  • 没有找到相关文章