gpt4 book ai didi

python - 如何在 Python 中对单个函数执行多处理?

转载 作者:可可西里 更新时间:2023-11-01 13:40:37 26 4
gpt4 key购买 nike

我正在阅读 Multiprocessing Python 3 的主题并尝试将该方法合并到我的脚本中,但是我收到以下错误:

AttributeError: __ exit __

我使用带有 i-7 8 核处理器的 Windows 7,我有一个大型 shapefile,我希望最好使用所有 8 核来处理它(使用制图软件 QGIS)。下面是我的代码,我将不胜感激对此事的任何帮助:

from multiprocessing import Process, Pool

def f():
general.runalg("qgis:dissolve", Input, False, 'LAYER_ID', Output)

if __name__ == '__main__':
with Pool(processes=8) as pool:
result = pool.apply_async(f)

最佳答案

multiprocessing.Pool 的上下文管理器功能仅添加到 Python 3.3 中:

New in version 3.3: Pool objects now support the context management protocol – see Context Manager Types. __enter__() returns the pool object, and __exit__() calls terminate().

__exit__ 未定义的事实表明您使用的是 3.2 或更早版本。您需要在 Pool 上手动调用 terminate 以获得等效行为:

if __name__ == '__main__':
pool = Pool(processes=8)
try:
result = pool.apply_async(f)
finally:
pool.terminate()

也就是说,您可能不想在这里使用 terminate(或 with 语句,通过扩展)。 Pool__exit__ 方法调用 terminate,这将强制退出您的 worker,即使他们没有完成工作。您可能想在退出之前真正等待工作人员完成,这意味着您应该改为调用 close(),然后使用 join 等待所有工作人员完成退出前完成:

if __name__ == '__main__':
pool = Pool(processes=8)
result = pool.apply_async(f)
pool.close()
pool.join()

关于python - 如何在 Python 中对单个函数执行多处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29894458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com