pytdx多进程示例
# encoding=utf-8
import math
from pytdx.hq import TdxHq_API
import pathlib
import multiprocessing as mp
from multiprocessing import Pool
class myTdx:
def __init__(self):
self.HqHOSTS = pathlib.Path("HqHOSTS.txt").read_text().split()
self.SYMBOLS = pathlib.Path("A.txt").read_text().split()
self.SYMBOLS2 = self.getsymbols2()
self.HSDICT = dict(zip(self.HqHOSTS, self.SYMBOLS2))
self.manager = mp.Manager
self.RESULT = self.manager().list()
def getsymbols2(self):
symbols = self.SYMBOLS
total = len(symbols)
page = len(self.HqHOSTS)
perpage = math.ceil(total / page)
return [symbols[i:i + perpage] for i in range(0, len(symbols), perpage)]
def getdata(self, host, slist):
# 数据获取接口一般返回list结构,
api = TdxHq_API()
liveapi = api.connect(host, 7709)
if liveapi:
r_list = []
for symbol in slist:
market_code = 1 if str(symbol[0]) == '6' else 0
data = liveapi.get_transaction_data(market_code, symbol, 0, 30)
rdic = {symbol: data}
r_list.append(rdic)
self.RESULT.extend(r_list)
else:
print(host, "服務器不可用...")
liveapi.disconnect()
def save(self):
# print(self.RESULT)
log = open('r.txt', 'a')
print(self.RESULT, file=log)
if __name__ == '__main__':
a = myTdx()
pool = Pool(len(a.HqHOSTS))
for host in a.HqHOSTS:
alist = a.HSDICT.get(host)
pool.apply_async(func=a.getdata, args=(host, alist))
pool.close()
pool.join()
a.save()
# encoding=utf-8
from pytdx.hq import TdxHq_API
import pathlib
import re
if __name__ == '__main__':
ips_text = pathlib.Path("HQHOSTA.txt").read_text(encoding='utf-8') # 读取文件
ips_list = re.compile(r'\d+\.\d+\.\d+\.\d+').findall(ips_text) # 正则查找所有ip
ips_listOK = []
api = TdxHq_API()
for ip in ips_list:
if api.connect(ip, 7709):
ips_listOK.append(ip)
if len(ips_listOK) > 0:
ips_listOld = pathlib.Path("HqHOSTS.txt").read_text(encoding='utf-8').split()
ips_listOld.extend(ips_listOK)
ips_new = list(set(ips_listOld)) # 去重
pathlib.Path("HqHOSTS.txt").write_text("\n".join(ips_new))
pathlib.Path('HQHOSTA.txt').unlink()
print("完成")
改成线程
# encoding=utf-8
import threading
from pytdx.hq import TdxHq_API
import pathlib
def get_data(host, symbol_list):
# 数据获取接口一般返回list结构,
api = TdxHq_API()
live_api = api.connect(host, 7709)
if live_api:
for symbol in symbol_list:
market_code = 1 if str(symbol[0]) == '6' else 0
data = api.to_df(live_api.get_transaction_data(market_code, symbol, 0, 30))
# data.to_csv(symbol + ".csv")
# print(data)
else:
print(host, "服務器不可用...")
live_api.disconnect()
class myTdx:
def __init__(self):
hosts = pathlib.Path("HqHOSTS.txt").read_text().split()
symbols = pathlib.Path("A.txt").read_text().split()
total = len(symbols)
page = len(hosts)
k, m = divmod(total, page)
symbols_divided = [symbols[i * k + min(i, m):(i + 1) * k + min(i + 1, m)] for i in range(page)]
self.hosts_symbols = dict(zip(hosts, symbols_divided))
self.multi_thread_run()
def multi_thread_run(self):
t = []
for host, symbol_list in self.hosts_symbols.items():
t.append(
threading.Thread(target=get_data, args=(host, symbol_list))
)
for thread in t:
thread.start()
for thread in t:
thread.join()
if __name__ == '__main__':
while True:
myTdx()
单线程示例
import pathlib
import time
from pytdx.hq import TdxHq_API
def get_one(st):
market_code = 1 if st[0] == '6' else 0
with api.connect("192.168.1.12", 7709):
datas = []
for i in range(15):
data = api.get_transaction_data(market_code, st, (15 - i) * 300, 300)
if data:
datas += data
df = api.to_df(datas)
if not df.empty:
df = df[(df['vol'] > 10000) & (df['buyorsell'] == 0) & (df['time'] > '09:30') & (df['time'] < '14:57')]
if not df.empty:
return str(market_code) + st
time_start = time.time()
api = TdxHq_API(auto_retry=True,raise_exception=False)
symbols = pathlib.Path("A.txt").read_text().split()
wan = []
i = len(symbols)
for st in symbols:
one = get_one(st)
if one:
wan.append(one)
i = i - 1
print(i)
f = open(r'D:\zq\T0002\blocknew\WS.blk', 'w')
f.write('\n'.join(wan))
f.close()
time_end = time.time()
print('耗时:', time_end - time_start)
浙公网安备 33010602011771号