Asyncio:发生异常时等待完成的任务
Posted
技术标签:
【中文标题】Asyncio:发生异常时等待完成的任务【英文标题】:Asyncio : Waiting for completed task when an exception occurs 【发布时间】:2021-05-04 03:20:23 【问题描述】:代码有 5 名工人在工作。 每个工人都是这样的(短代码):
async def worker(name):
queue_item = await queue.get()
msg = queue_item.message #<--- first attempt
#.....#
try:
#...get_message fails(timeout)...raise#
except errors.TimedOutError:
#Retry to get the message
msg = await get_messages(queue_item.channel, ids=queue_item.id) # <-- retry
#in order to process it again I put it in different queue
await queue_retry.put(msg)
但是,
await queue_retry
是否等待 msg = await get_messages
完成才能更新队列?
如果没有,我不知道它会放什么msg,我怀疑它不等待新的get_message
,它会放旧的。
【问题讨论】:
是的,await get_messages(...)
会等待get_messages(...)
完成后再继续。如果您不确定,请将变量名称更改为 msg2
或其他名称(在 await
和 queye_retry.put
行中),以说服自己您不是在处理旧的 msg
。
【参考方案1】:
await queue_retry
是否等待msg = await get_messages
完成才能更新队列?
是的:await get_messages(...)
会等待get_messages(...)
完成,然后再继续。如果您不确定,请将变量名称更改为 emg msg2
(在 await
和 queue_retry.put lines
中),以说服自己您不是在处理旧的 msg
。
【讨论】:
以上是关于Asyncio:发生异常时等待完成的任务的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.6 asyncio - 从未检索到任务异常 - 任务的产量不好:200