asyncio无法创建新的事件循环

2024-06-26 14:42:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Fedora26工作站上使用Python3.6.2。在

下面是一些展示我问题的剪贴簿代码:

编辑:在代码中添加了萨姆·哈特曼的建议。在

import asyncio, json
from autobahn.asyncio.websocket import WebSocketClientProtocol, WebSocketClientFactory

class MyClientProtocol(WebSocketClientProtocol):

    def onConnect(self, response):
        print(response.peer)

    def onOpen(self):
        print("open")
        self.sendMessage(json.dumps({'command': 'subscribe', 'channel': "1010"}).encode("utf8"))

    def onMessage(self, payload, isBinary):
        print("message")
        print(json.loads(payload))

factory1 = WebSocketClientFactory("wss://api2.poloniex.com:443")
factory1.protocol = MyClientProtocol
loop1 = asyncio.get_event_loop()
loop1.run_until_complete(loop1.create_connection(factory1, "api2.poloniex.com", 443, ssl=True))

try:
    loop1.run_forever()
except keyboardInterrupt:
    pass
loop1.close()

asyncio.set_event_loop(asyncio.new_event_loop())

factory2 = WebSocketClientFactory("wss://api2.poloniex.com:443")
factory2.protocol = MyClientProtocol
loop2 = asyncio.get_event_loop()
loop2.run_until_complete(loop2.create_connection(factory2, "api2.poloniex.com", 443, ssl=True))

try:
    loop2.run_forever()
except KeyboardInterrupt:
    pass
loop2.close()

关闭初始异步事件循环后,创建另一个并将其设置为全局事件循环后,尝试使用新的事件循环会产生以下错误:

^{pr2}$

在关闭之前的事件循环之后,可能需要重新打开事件循环,这似乎是合理的。实际上,这个问题甚至说明了如何:Asyncio Event Loop is Closed

下面的代码应该实现这一点:

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

所以我显然做错了什么。有人能看到丢失的东西吗?在


Tags: run代码selfcomloopeventasynciojson