gpt4 book ai didi

python - 调试python多处理中的错误

转载 作者:行者123 更新时间:2023-11-28 20:43:15 24 4
gpt4 key购买 nike

我正在使用 multiprocessing 模块的 Pool 函数,以便在不同数据上并行运行相同的代码。

事实证明,我的代码在某些数据上引发了异常,但没有给出发生这种情况的确切行:

Traceback (most recent call last):
File "my_wrapper_script.py", line 366, in <module>
main()
File "my_wrapper_script.py", line 343, in main
results = pool.map(process_function, folders)
File "/usr/lib64/python2.6/multiprocessing/pool.py", line 148, in map
return self.map_async(func, iterable, chunksize).get()
File "/usr/lib64/python2.6/multiprocessing/pool.py", line 422, in get
raise self._value
KeyError: 'some_key'

我知道 multiprocessing.log_to_stderr() ,但它似乎在出现并发问题时很有用,但我不是这样。

有什么想法吗?

最佳答案

如果您使用的是足够新的 Python 版本,您实际上会看到真正的异常先于该版本打印。例如,这是一个失败的示例:

import multiprocessing

def inner():
raise Exception("FAIL")

def f():
print("HI")
inner()

p = multiprocessing.Pool()
p.apply(f)
p.close()
p.join()

这是使用 python 3.4 运行时的异常:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 119, in worker
result = (True, func(*args, **kwds))
File "test.py", line 9, in f
inner()
File "test.py", line 4, in inner
raise Exception("FAIL")
Exception: FAIL
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "test.py", line 13, in <module>
p.apply(f)
File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 253, in apply
return self.apply_async(func, args, kwds).get()
File "/usr/local/lib/python3.4/multiprocessing/pool.py", line 599, in get
raise self._value
Exception: FAIL

如果不能选择使用较新的版本,最简单的方法是将辅助函数包装在一个 try/except block 中,该 block 将在重新引发异常之前打印异常:

import multiprocessing
import traceback

def inner():
raise Exception("FAIL")

def f():
try:
print("HI")
inner()
except Exception:
print("Exception in worker:")
traceback.print_exc()
raise

p = multiprocessing.Pool()
p.apply(f)
p.close()
p.join()

输出:

HI
Exception in worker:
Traceback (most recent call last):
File "test.py", line 11, in f
inner()
File "test.py", line 5, in inner
raise Exception("FAIL")
Exception: FAIL
Traceback (most recent call last):
File "test.py", line 18, in <module>
p.apply(f)
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 244, in apply
return self.apply_async(func, args, kwds).get()
File "/usr/local/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
Exception: FAIL

关于python - 调试python多处理中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29080650/

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