我有 2 个函数:第一个 def_a
是异步函数,第二个是 def_b
是一个常规函数,调用结果为 def_a
作为 add_done_callback
函数的回调。
我的代码如下所示:
import asyncio
def def_b(result):
next_number = result.result()
# some work on the next_number
print(next_number + 1)
async def def_a(number):
await some_async_work(number)
return number + 1
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(def_a(1))
task.add_done_callback(def_b)
response = loop.run_until_complete(task)
loop.close()
它工作完美。
当第二个函数 def_b
变得异步时,问题就开始了。现在它看起来像这样:
async def def_b(result):
next_number = result.result()
# some asynchronous work on the next_number
print(next_number + 1)
但是现在我不能将它提供给 add_done_callback
函数,因为它不是常规函数。
我的问题是- 如果 def_b
是异步的,我的问题是 - 是否可能以及如何向 add_done_callback
函数提供 def_b
函数?
原文由 Yuval Pruss 发布,翻译遵循 CC BY-SA 4.0 许可协议
add_done_callback
被认为是“低级”接口。使用协程时,您可以通过多种方式 链接它们,例如:请记住
add_done_callback
如果您的未来引发异常,仍将调用回调(但调用result.result()
将引发它)。