【发布时间】: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。
标签: python exception timeout python-asyncio message