[英]How to call async function within non async function in python?
我知道await和async必須成對。 但。 這是我的問題:
我有一個 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.