繁体   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