[英]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.