首页 > 解决方案 > 如何重写代码来修复错误(RuntimeError: This event loop is already running. ) websockets + asyncio

问题描述

我有执行在线识别的代码。目前,它在最后一行给出错误“RuntimeError: This event loop is already running”。蟒蛇 2019.10,Python 3.7.4

# websockets
async def recognize(url, data):
    async with websockets.connect(url) as websocket:
        await websocket.send(data)
        recognized_text = ""
        recognized_text = await websocket.recv()
        #print(f"< {recognized_text}")
        #print(recognized_text)
        return recognized_text

in_file = open(filename1, "rb")
data = in_file.read()
in_file.close()
print(asyncio.get_event_loop().run_until_complete(recognize(url, data)))

这里建立了一个会话,然后需要传输数据进行处理并接收识别的文本。我可以大致想象一个 websocket 在做什么。建立与服务器的连接,发送数据,然后等待响应。我不明白 asyncio 在这里是如何工作的。我读到(问题/53248431)现在这不起作用,因为我有版本> = 5.0 的龙卷风,他们建议降低版本,但我不想。如何正确改写?请解释它是如何工作的)

标签: pythonwebsocketpython-asyncio

解决方案


您收到错误是因为您的上述程序/事件仍在运行,因为它没有被杀死。

因此,在终端中键入以下命令:

pkill -9 python 

然后重新启动程序。

(这仅适用于 Linux 系统)


推荐阅读