gpt4 book ai didi

python pool.map_async 不等待 .wait()

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:11 41 4
gpt4 key购买 nike

我正在尝试运行一个与 pool.apply_async 配合得很好的胖函数

现在,我正在尝试 pool.map_async 函数(使用 functools.partial 方法传递了 2 个参数),程序立即完成,没有任何错误或异常...

    files = list_files(mypath) # list of files to process
csv_rows = None
result = mp.Queue() #result queue from multiprocessing module

pool = mp.Pool(4)
t = pool.map_async( partial(process_file, result), files)
t.wait() # it doesn't wait HERE ... program exits immediately - no errors

关于我可能遗漏了什么的任何线索?

最佳答案

首先,如果您要立即等待,您可能不需要map_async。如果是这种情况,则只需使用 map。您也可以删除 queue 并只返回值。但这可能不是您遇到的问题。

问题很可能是 wait 方法没有引发远程异常。您的 process_file 方法很可能实际上在池进程中失败,但您没有看到这些异常。就像 Blckknght 提到的那样,您应该切换到使用 get 方法,如您所见 here , 将引发远程异常。这是一个简单的示例,其中 wait 方法隐藏了远程进程异常,以及如果您切换到 get 如何再次看到它们:

import multiprocessing as mp

def just_dies(n):
raise ValueError("Test")

if __name__ == "__main__":
pool = mp.Pool(4)
results = pool.map_async(just_dies, range(10))

# the wait will immediately silently pass
#results.wait()

# this will actually raise the remote exception
results.get()

如果你运行这个你会得到一个像这样的回溯错误信息

The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "foo.py", line 14, in <module>
results.get()
File "XXX/python3.5/multiprocessing/pool.py", line 608, in get
raise self._value
ValueError: Test

如果您切换到使用 wait 方法,那么您将看不到它。

关于python pool.map_async 不等待 .wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572875/

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