如何在Python中以无限线程形式启动自定义BitMEX WebSocket程序?
如何将自定义BitMEX WebSocket程序作为无限线程运行?
你已经写好了自定义的WebSocket处理类,接下来只需要在主程序块里把它启动起来,并且让它持续运行即可。这里有两种常见的实现方式,根据你的项目需求选择:
方式一:直接阻塞主线程运行(适合单独运行该服务)
这种方式最简单,直接调用WebSocket实例的run_forever()方法,它会让WebSocket客户端在当前线程持续运行,直到连接断开或者程序被主动终止:
from bitmex_simple_websocket import BitMEXWebSocket import json class MyBitMEXWebsocket(BitMEXWebSocket): def on_message(self, ws, message): data = json.loads(message) if 'table' in data and data['table'] == 'tradeBin1m': print(data['data'][0]) if __name__ == '__main__': # 实例化自定义WebSocket客户端 bitmex_ws = MyBitMEXWebsocket(endpoint='wss://www.bitmex.com/realtime?subscribe=tradeBin1m:XBTUSD') # 启动并持续运行WebSocket连接 bitmex_ws.run_forever()
方式二:作为后台线程运行(不阻塞主线程,适合与其他业务逻辑共存)
如果你的项目还有其他代码需要执行,不想让WebSocket阻塞主线程,可以用Python的threading模块把它放到后台线程中:
from bitmex_simple_websocket import BitMEXWebSocket import json import threading class MyBitMEXWebsocket(BitMEXWebSocket): def on_message(self, ws, message): data = json.loads(message) if 'table' in data and data['table'] == 'tradeBin1m': print(data['data'][0]) if __name__ == '__main__': bitmex_ws = MyBitMEXWebsocket(endpoint='wss://www.bitmex.com/realtime?subscribe=tradeBin1m:XBTUSD') # 创建后台线程,将WebSocket的run_forever方法作为执行目标 ws_thread = threading.Thread(target=bitmex_ws.run_forever, daemon=True) # 启动后台线程 ws_thread.start() # 这里可以编写你的其他主程序逻辑 # 示例:保持主线程存活,直到捕获Ctrl+C信号 try: while True: # 主线程可在此处理其他任务,或仅保持存活状态 pass except KeyboardInterrupt: # 优雅关闭WebSocket连接 bitmex_ws.close() print("WebSocket连接已关闭")
小提示
- 标记线程为
daemon=True后,当主线程退出时,后台的WebSocket线程会自动终止,避免程序残留进程。 - 捕获
KeyboardInterrupt信号可以实现优雅退出,避免强制终止导致的连接异常。
内容的提问来源于stack exchange,提问作者abudabi
相关产品推荐
相关产品推荐

