Python请求接收流式更新的模块通过p重置连接

2024-06-14 01:39:56 发布

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

我在一个外汇提供商(OANDA)的一个实践帐户中构建了我自己的python(3.2.1版)交易应用程序,但是我在使用基于linuxdebian的操作系统接收流媒体价格时遇到了一些问题。在

特别是,我遵循了他们的“Python流式传输速率”指南:http://developer.oanda.com/rest-live/sample-code/。在

我有一个线程调用函数“connect_to_stream”,它打印出从服务器接收到的所有滴答声:

streaming_thread = threading.Thread(target=streaming.connect_to_stream, args=[])
streaming_thread.start()

在streaming.connect_到\u流功能定义如下:

^{pr2}$

msg变量包含流式处理接收到的滴答声。在

问题是,我平均会收到三个小时的滴答声,之后连接就会断开,脚本要么挂起而没有收到任何滴答声,要么抛出一个异常,原因是“由对等方重置连接”。在

你能谈谈我在这里哪里出错了吗?有没有什么与请求库有关的东西(可能是iter_行)?在

我希望无限期地接收滴答声,除非引发键盘异常。在

谢谢


Tags: to应用程序streamconnect流式价格帐户交易
1条回答
网友
1楼 · 发布于 2024-06-14 01:39:56

这对我来说并不奇怪,一个服务可以关闭超过3个小时的连接。在

这可能是他们的一个安全措施,确保从ghost客户端释放服务器套接字。在

所以当你断开连接时,你应该重新连接。在

try:
    s = requests.Session()
    url = "https://" + domain + "/v1/prices"
    headers = {'Authorization' : 'Bearer ' + access_token,
               'Connection' : 'keep-alive'
              }
    params = {'instruments' : instruments, 'accountId' : account_id}
    req = requests.Request('GET', url, headers = headers, params = params)
    pre = req.prepare()
    resp = s.send(pre, stream = True, verify = False)
    return resp
except SocketError as e:
    if e.errno == errno.ECONNRESET:
        pass # connection has been reset, reconnect.
except Exception as e:
    pass # other exceptions but you'll probably need to reconnect too.

相关问题 更多 >