我在 Python 中使用 websocket 库,我对此并不陌生。
我想为 websockets 创建多个不同的连接。这通过我的自定义 WebsocketProcess 类发生,该类打开连接、接收事件、保留记录 ID,然后调用 API 来获取此特定记录的信息。
我无法并行运行它们。
请看下面(忽略大量进口)
主要的:
#if __name__ == "__main__":
async def main():
#The length AccessTokens, ClientDescriptions and SQLTablesFix determines how many websockets we need to open
L = await asyncio.gather(
properties[0].websocket_starting(AccessTokens[0], ClientDescriptions[0], SQLTablesFix[0]),
properties[1].websocket_starting(AccessTokens[1], ClientDescriptions[1], SQLTablesFix[1]),
...
...
)
asyncio.run(main())
WebsocketProcess 类如下:
class WebsocketProcess:
"""description of class"""
def on_error(self, ws, error):
#{Relevant Code Here}
def on_open(self, ws):
print("\nOn Open\n")
def run(*args):
while True:
try:
time.sleep(1)
except TimeoutError:
pass
ws.close()
def on_close(self):
#{Relevant Code Here}
def on_message(self, ws, message):
#{Relevant Code Here}
ws.close()
def connect_websocket(self, AccessToken, ClientDescription, SQLTablesFix):
ws = websocket.WebSocketApp("_______url_here_____",
on_open = self.on_open,
on_message = self.on_message,
on_error = self.on_error,
on_close = self.on_close,
cookie = "ClientToken=_______; AccessToken=%s" % AccessToken)
ws.run_forever()
async def websocket_starting(self, AccessToken, ClientDescription, SQLTablesFix):
print("\nwebsocket_starting")
self.AccessToken = AccessToken
self.ClientDescription = ClientDescription
self.SQLTablesFix = SQLTablesFix
self.connect_websocket(self.AccessToken, self.ClientDescription, self.SQLTablesFix)
从上面可以看出,我已经将 main 改为异步来并行运行 websocket_process 类的多个实例。它打开到第一个 websocket 的连接,并在那里停止等待事件,而不继续打开第二个 websocket。
我尝试使 WebsocketProcess 类完全异步,但我收到一个错误,指出从未等待协程“运行”(在 connect_websocket 方法中)。
你们对如何并行运行 websocket_process 类的多个实例有什么建议吗?
谢谢!