连接池 pytdx.pool

行情连接池 API (实验阶段)

连接池API只针对特定的场景下使用,它还在非常早期的开发阶段

描述

它即可以在普通行情api上使用,也可以在扩展行情api中使用,它的基础的逻辑为: 我们需要提供一组ip,他们被划分为3类角色

  • 一个正在进行通讯的主连接 我们命名它为M

  • 一个热备选连接,它通过心跳包和备选服务器连接, 它为 H

  • 一组备选连接池,它们周期性的重拍顺序(可能是根据连接服务器的速度),始终准备替换上面两个连接。 我们命名它们为P

当主连接P的接口调用出现问题时,我们将:

  • 热备选连接H 转化为主连接M,重发主连接的请求

  • 从连接池P中选出最快的一个连接,重新成为热备选连接H, 并通过心跳包维持服务器的链接

  • 连接M回到备选连接池P中。

如此,保证我们的API请求的可靠性

例子:

from pytdx.hq import TdxHq_API
from pytdx.pool.ippool import AvailableIPPool
from pytdx.config.hosts import hq_hosts
import random
import logging
import pprint

ips = [(v[1], v[2]) for v in hq_hosts]

random.shuffle(ips)
ips5 = ips[:5]


ippool = AvailableIPPool(TdxHq_API, ips5)


primary_ip, hot_backup_ip = ippool.sync_get_top_n(2)

print("make pool api")

api = TdxHqPool_API(TdxHq_API, ippool)


with api.connect(primary_ip, hot_backup_ip):
    
    ret = api.get_xdxr_info(0, '000001')
    print("send api call done")
    pprint.pprint(ret)

areur3ady补充

通过实际使用,发现在我的网络环境下,运行pytdx.pool下相关代码,虽然获得了不错的api稳定性,避免出现timeout的情况,但是牺牲了速度。

我的解决办法是,先打开tdx软件,使用网络测速功能(快捷键33),挑选延迟比较好的服务器地址,然后在软件开始界面的“通讯设置”找到这些服务器的ip地址,复制进代码,然后:

ips=[xxxx.xxxx.xxxx.xxxx, xxxx.xxxx.xxxx.xxxx] def setting_ip(): for ip in ips: try: if api.connect(ip,7709): return True except: continue

本来if api.connect()的地方换成setting_ip()就可以基本解决单个ip地址不稳定的问题。

Last updated