Javascript 耳鼻咽喉问题。如果一个事件循环已经在运行,python不允许您使用run\u,直到它完成,这会给您一个错误:RuntimeError:这个事件循环已经在运行。

Javascript 耳鼻咽喉问题。如果一个事件循环已经在运行,python不允许您使用run\u,直到它完成,这会给您一个错误:RuntimeError:这个事件循环已经在运行。,javascript,python,websocket,socket.io,aiohttp,Javascript,Python,Websocket,Socket.io,Aiohttp,这听起来很矛盾,对吗?你是对的。但是,这个问题非常普遍,存在另一个库的唯一目的是对python asyncio库进行monkey修补来解决这个问题。我找到了这个图书馆 在安装和使用该库之后,我现在可以这样做,完全解决了我的问题: main\u event\u loop=asyncio.get\u event\u loop() 主事件循环。运行直到完成(sio.emit(“ChangeProgressState”)) 现在程序按预期运行,消息立即发送/到达 感谢所有帮助回答这个问题的人!我终于找

这听起来很矛盾,对吗?你是对的。但是,这个问题非常普遍,存在另一个库的唯一目的是对python asyncio库进行monkey修补来解决这个问题。我找到了这个图书馆

在安装和使用该库之后,我现在可以这样做,完全解决了我的问题:

main\u event\u loop=asyncio.get\u event\u loop()
主事件循环。运行直到完成(sio.emit(“ChangeProgressState”))

现在程序按预期运行,消息立即发送/到达

感谢所有帮助回答这个问题的人!我终于找到了一个有点非正统的解决方案,所以我将在这里解释整个情况

本质上,为了在同步上下文中运行异步方法,必须在事件循环上使用asyncio的
run\u直到\u complete
方法。有人问我这个问题时,我就是这样做的。但是,在与python socketio库的创建者交谈之后,您似乎必须在与服务器运行的事件循环相同的事件循环中运行它

然而,这产生了一个不同的问题。如果一个事件循环已经在运行,python不允许您使用run\u,直到它完成,这会给您一个错误:
RuntimeError:这个事件循环已经在运行。

这听起来很矛盾,对吗?你是对的。但是,这个问题非常普遍,存在另一个库的唯一目的是对python asyncio库进行monkey修补来解决这个问题。我找到了这个图书馆

在安装和使用该库之后,我现在可以这样做,完全解决了我的问题:

main\u event\u loop=asyncio.get\u event\u loop()
主事件循环。运行直到完成(sio.emit(“ChangeProgressState”))

现在程序按预期运行,消息立即发送/到达

为了清楚起见,是否需要30秒到几分钟才能看到客户端控制台中打印的“Get event.”?如果您的客户端是一个浏览器(而不是node.js),那么用于套接字连接的浏览器的网络选项卡(开发工具)是否显示了任何有用的信息?事件是否真的会在这样的循环中发出,您能否不调用sio.emit('ChangeProgressState')?不是巨蟒,但看起来odd@Tmello225您可以尝试使用HTTP而不是WebSocket吗。您提到了rasperry pi上的chrome、python API以及使用JS socket.io客户端。我将启动一个消除过程,并使用一个简单的node.js socket.io服务器进行测试,还将从桌面版的chrome上进行测试,并通过消除过程找到罪魁祸首。@Chev经过一些调查,很明显这是服务器端(python)的问题。我可以以正常的速度将消息从客户端发送到服务器,但不能反过来。实际的
emit
方法立即完成,但直到稍后才会发送任何内容。发现得很好。我不懂Python,但语句
run\u until\u complete
听起来像是在不止一次地运行,可能在后台出现了一些奇怪的节流/排队。不管怎样,祝你好运。为了清楚起见,是否需要30秒到几分钟才能看到客户端控制台上打印的“Get event”(获取事件)?如果您的客户端是一个浏览器(而不是node.js),那么用于套接字连接的浏览器的网络选项卡(开发工具)是否显示了任何有用的信息?事件是否真的会在这样的循环中发出,您能否不调用sio.emit('ChangeProgressState')?不是巨蟒,但看起来odd@Tmello225您可以尝试使用HTTP而不是WebSocket吗。您提到了rasperry pi上的chrome、python API以及使用JS socket.io客户端。我将启动一个消除过程,并使用一个简单的node.js socket.io服务器进行测试,还将从桌面版的chrome上进行测试,并通过消除过程找到罪魁祸首。@Chev经过一些调查,很明显这是服务器端(python)的问题。我可以以正常的速度将消息从客户端发送到服务器,但不能反过来。实际的
emit
方法立即完成,但直到稍后才会发送任何内容。发现得很好。我不懂Python,但语句
run\u until\u complete
听起来像是在不止一次地运行,可能在后台出现了一些奇怪的节流/排队。不管怎样,祝你好运。谢谢你的回复,亚瑟。经过一些调查,很明显这是一个服务器端(python)问题。我可以以正常的速度将消息从客户端发送到服务器,但不能反过来。实际的emit方法立即完成,但直到稍后才会发送任何内容。很好的检测工作,@tmello225,我赞同Chev关于在已知稳定环境中检查通信以及可能交换服务器的想法。请注意,再看一点,我看不到任何关于发射的东西需要等待连接来发射消息——有没有可能您的循环确实发射了消息,只是什么都没有接收到消息?是否有任何目标代码行会在发出该事件之前等待连接?如果您确定答案没有帮助,我将删除我的答案,听起来您真的很接近!当你把每件事都搞清楚的时候,一定要写一个答案:)我可能会找时间看看Pyton socketio,但如果我不知道的话,祝你好运!谢谢你的回复,亚瑟。经过一些调查,很明显这是一个服务器端(python)问题。我可以以正常的速度将消息从客户端发送到服务器,但不能反过来。实际的emit方法立即完成,但直到稍后才会发送任何内容。很好的侦探工作,@tmello225,我赞同切夫的想法