簡體   English   中英

Python-asyncio-等待回調中的未來

[英]Python - asyncio - Wait for a future inside a callback

這是我的代碼,我希望my_reader等待最多5秒鍾,以備將來使用,然后對my_future.result() 請注意, my_reader 不是 協程 ,它是一個回調

import asyncio, socket

sock = ...

async def my_coroutine():
    ...

def my_reader():
    my_future = asyncio.Future()
    ...

    # I want to wait (with a timeout) for my_future


loop = asyncio.get_event_loop()
loop.add_reader(sock, my_reader)
loop.run_forever()
loop.close()

我不想使用:

  • AbstractEventLoop.create_datagram_endpoint()
  • AbstractEventLoop.create_connection()
  • ...

我擁有的套接字是從另一個模塊返回的,我必須讀取給定大小的數據包。 轉移必須在5秒內完成。

如何在回調中等待將來?

抱歉,不可能在回調中等待。 回調應按定義立即執行-否則事件循環將在回調執行期間掛起。

您的邏輯應該建立在協程上,但是低級on_read回調可能會通過設置future的值來通知這些協程。

請參閱aiopg.connection以獲取靈感。 回調名為Connection._ready

您應該分別運行協程,並通過Queue從回調中向其發送數據。

看這個答案:

https://stackoverflow.com/a/29475218/1112457

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM