如何解决Asyncio:发生异常时等待完成的任务
代码有 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 queue_retry
是否在更新队列之前等待 msg = await get_messages
完成?
是:await get_messages(...)
在继续之前会等待 get_messages(...)
完成。如果您不确定,请将变量名称更改为 emg msg2
(在 await
和 queue_retry.put lines
中)以说服自己您不是在处理旧的 msg
.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。