【问题标题】:Python program not throwing error when called with wrong parameters in apply_async [duplicate]在apply_async中使用错误参数调用Python程序时不会引发错误[重复]
【发布时间】:2022-01-04 13:55:29
【问题描述】:

您好,这是我想做的事情的一个示例。我想在我的应用程序中使用线程。它工作正常,问题是当我错误地调用具有错误参数的函数时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'

为什么我在使用 threadpool 时没有得到相同的错误输出?有没有办法得到那个错误信息。我正在使用 python 版本 3.8.10

更新 error_callback 可用于返回错误。所以函数调用就变成了这样的样子

def callback_error(result):
    print('error', result)

pool.apply_async(console_log, (d,), error_callback=callback_error)

我是通过问题建议找到的。链接:Exception thrown in multiprocessing Pool not detected

【问题讨论】:

标签: python multithreading multiprocessing apply-async


【解决方案1】:

你可能需要这样做

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

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

【讨论】:

    猜你喜欢
    • 2016-11-23
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2016-02-11
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多