【问题标题】:Asyncio : Waiting for completed task when an exception occursAsyncio:发生异常时等待完成的任务
【发布时间】: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 或其他名称(在 awaitqueye_retry.put 行中),以说服自己您不是在处理旧的 msg

标签: python exception timeout python-asyncio message


【解决方案1】:

await queue_retry 是否等待msg = await get_messages 完成才能更新队列?

是的:await get_messages(...) 会等待get_messages(...) 完成,然后再继续。如果您不确定,请将变量名称更改为 emg msg2(在 awaitqueue_retry.put lines 中),以说服自己您不是在处理旧的 msg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多