簡體   English   中英

如何在 python 中的非異步 function 中調用異步 function?

[英]How to call async function within non async function in python?

我知道awaitasync必須成對。 但。 這是我的問題:

我有一個 function 喜歡

def url_open(req):
    #fetch url content synchronize

現在,我想更改為另一個版本,例如:

def url_open(req):
    await self.websocket.send(req)
    content = await self.websocket.recv()

問題是url_open function 存在於整個項目的許多地方,它位於調用樹的底部。 不可能讓所有的調用者都是異步的 function。

那么,我怎樣才能使這項工作? 從 python websocket模塊中的其他異步函數獲得一些結果?

=======更新======

在我嘗試@Viliam Popovec 提供后,我收到了這個警告

RuntimeWarning: coroutine 'hello' was never awaited

錯誤

This event loop is already running

websocket 在我的應用程序中是這樣運行的

async def main():
    async with websockets.serve(echo, '0.0.0.0', 8001):
        await asyncio.Future()

asyncio.run(main())

新的事件循環似乎與現有的websocket runloop沒有沖突

如果您不能將url_open function 的所有實例都修改為異步的,那么您可以使用loop s 來調用一些異步 function (例如下面的代碼示例中的hello( ) )。

async def hello():
    await asyncio.sleep(1)
    print("Hello World!")


def url_open():
    loop = asyncio.get_event_loop()
    loop.run_until_complete(hello())

暫無
暫無

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

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