0

我正在使用 Binance Websocket 来监听账户事件MARKET事件。我从主人那里复制每一个订单来拯救它,当我运行它时它工作得很好,它从所有主人那里复制。但是,当我使用nohup Linux 服务在后台运行它时,它会在运行脚本 3 天后停止读取任何事件。我试图捕获STDERR,但脚本中没有任何内容。即使它作为一个正在运行的进程出现在htop中,但没有完成它的工作。我尝试使用asyncio框架,但遇到了同样的问题。从长远来看,我需要同时收听多主播。

import csv
import math
import threading
import time
from datetime import datetime

from binance import ThreadedWebsocketManager, Client

masters = [
    [
        'api1',
        'secret1',
        'test1'
    ],
    [
        'api2',
        'secret2',
        'test2'
    ],
]

def CopyOrder(order, client, name):
    # some code to copy order from master
def main(api_key: str, api_secret: str, name: str):
    print("Start listening on", name) # Debug

    twm = ThreadedWebsocketManager(api_key=api_key, api_secret=api_secret) 
    cl = Client(api_key=api_key, api_secret=api_secret, testnet=False) 
    twm.start() # Start the websocket manager

    def handle_socket_message(msg):
        if msg['e'] == 'executionReport':
            # check if it is order or not
            CopyOrder(order=msg, client=cl, name=name)
            


    twm.start_user_socket(callback=handle_socket_message)
    twm.join()


if __name__ == "__main__":

    for master in masters:
        # listen to all masters for new orders
        thread = threading.Thread(target=main, args=(master[0], master[1], master[2]))
        thread.start()
4

2 回答 2

2

引用币安 https://binance-docs.github.io/apidocs/spot/en/#websocket-market-streams

单次连接 stream.binance.com 仅 24 小时有效;预计在 24 小时后断开连接

我也在使用 Binance Websocket,我注意到相同的随机断开连接,有时在一天后,有时在几天后,所以我现在有一个正常运行时间检查,我管理断开/重新连接

于 2021-09-06T11:30:18.017 回答
0

我做了以下,停止它并每 1 小时重新启动一次。

虽然是真的:

 user_socket = twm.start_user_socket(callback=handle_socket_message)

 time.sleep(3600)

 self.twm.stop_socket(user_socket)

但是我发现了另一个问题,我会无限地打开线程,一个星期我有100多个,它增加了内存和cpu,我不知道为什么它们不关闭。如果有人有答案,我很感激。

1 主线程 2760 错误 11

2 ThreadPoolExecutor-0_0 20836 真 11

3 ThreadPoolExecutor-1_0 24580 真 11

4 ThreadPoolExecutor-0_1 18608 真 11

5 ThreadPoolExecutor-1_1 26140 真 11

6 ThreadPoolExecutor-1_2 12320 真 11

7 ThreadPoolExecutor-1_3 16352 真 11

8 ThreadPoolExecutor-1_4 26160 真 11

9 ThreadPoolExecutor-1_5 23196 真 11

10 ThreadPoolExecutor-1_6 15032 真 11

11 ThreadPoolExecutor-1_7 25932 真 11

问题是他们没有关闭,我不知道该怎么做。

于 2021-10-02T01:32:02.490 回答