gpt4 book ai didi

python - AysncResult 和 python 池中 error_callback 回调之间的区别

转载 作者:行者123 更新时间:2023-12-01 08:59:04 26 4
gpt4 key购买 nike

我正在使用池来启动 python3.6 中的工作进程。工作人员在完成后将返回 True 或 False,我想知道使用 AsyncResult 返回对象或使用回调函数来检查工作人员是否返回 True 或 False 之间有什么区别。根据我的理解,回调是在主进程中调用的,无论如何我都会在同一个地方进行检查。

#Using the AsyncResult way
def check_result(result):
if result:
#Successful do something
else:
#Failed

with Pool() as pool:
result = pool.apply_async(upload, (args, ))
check_result(result.get())

#Using callbacks

def check_result(result):
if result:
#Successful do something

def err_result(result):
#Do something

with Pool() as pool:
pool.appy_async(upload, (args,), callback=check_result, error_callback=err_result)

我看到在python3.6中它们允许error_callback,那么这两段代码是否等效?两者各有什么优缺点?

谢谢

最佳答案

AsyncResultcallback 之间的比较有点不幸。 请注意,您只有可用于异步方法的回调(返回 AsyncResult 对象),因此本故事中没有关于这些事情的“对立”。

当您编写 check_result(result.get()) 时,您不会将一些 AsyncResult 对象传递到 check_result 中,而是传递一个已经等待正常结果,在您的情况下是 bool 值(如果不是异常(exception))。因此,这不是 AsyncResultcallback 之间的区别,而是在结果上手动调用 check_result 或预先注册回调之间的区别。

I see that in python3.6 they allow error_callback, so are these two bits of code equivalent? What are the pros and cons of both?

不,这两个片段并不等同。 error_callback 是一个异常处理程序,您可能的 False 结果不会触发它,但异常会触发。在这种情况下,err_result 中的 result 参数将填充异常实例。与上面代码片段的不同之处在于,一旦您调用 result.get() 并且您没有将其包含在 try-except-block 中,异常就会在您面前爆炸。

error_callback 的明显“优点”是省略了 try-except-block,常规回调的“优点”也是减少了代码长度。仅将两者用于立即返回的任务,例如检查和日志记录,以防止阻塞池中运行的线程。

关于python - AysncResult 和 python 池中 error_callback 回调之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52613759/

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