Python程序在apply_async中使用错误参数调用时未引发错误



你好,这是我想做的事情的示例。我想在我的应用程序中使用线程。它工作得很好,问题是当我错误地用错误的参数调用函数时,python不会抛出错误,这有时会使调试变得更困难。

示例程序:正如您所看到的,我调用console_log函数时使用了错误数量的参数。当我运行程序时,没有输出,它退出

from multiprocessing.pool import ThreadPool
def console_log(id, msg):
print("{} : {}".format(id, msg))
data = [1,2,3,4,5,6]
max_threads = 1
pool = ThreadPool(processes=max_threads)
for d in data:
pool.apply_async(console_log, (d))
pool.close()
pool.join()

相同的程序,但没有线程和池

def console_log(id, msg):
print("{} : {}".format(id, msg))
data = [1,2,3,4,5,6]
for d in data:
console_log(d)

输出

Traceback (most recent call last):
File "async.py", line 12, in <module>
console_log(d)
TypeError: console_log() missing 1 required positional argument: 'msg'

当我使用线程池时,为什么不能得到相同的错误输出?有没有办法得到那个错误信息。我使用的是python 3.8.10版

更新error_callback可用于返回错误。所以函数调用变成了类似的东西

def callback_error(result):
print('error', result)
pool.apply_async(console_log, (d,), error_callback=callback_error)

我是通过问题建议找到的。链接:未检测到在多处理池中引发异常

您可能需要进行

for d in data:
pool.apply_async(console_log, (d,))

我知道过去如果我不加逗号就会被投诉

最新更新