A:针对使用TSLPy模块交互中,python程序中用
远程的方式与天软频繁交互可能由于连接失败导致程序的中断问题,这里提供一种较为合理的解决方案:
封装tslconnect模块,重新对天软的连接及交互接口进行封装。
调用时,只需要导入tslconnect模块,即可在python的任何地方直接做交互,不用再考虑连接问题。
在连接失败时,会多次尝试自动连接,避免某一时刻的不稳定连接造成程序的中断。
PS:只需在python程序结束时,再做连接的断开操作,避免频繁登陆退出天软服务器,提高交互效率及连接的稳定性。
本方案供有需要的用户参考,具体实现及使用说明如下:
解决方案的要点:
1、将连接服务器的过程进行独立封装,当第一次请求连接不成功时,停个几秒(时间用户可以改)再尝试连接,直到连接成功为止,除非尝试10次(次数可以用户定义)都不成功时,再进行报错提示。
即,tslconnect替代原登陆模型。
2、在执行交互时判断当前是否已连接,若没有连接,则先做连接请求,再交互,提前解决掉连接已断开还在请求交互的情况。
即,对原交互函数RemoteExecute与RemoteCallFunc再封装一层,用tslRemoteExecute与tslRemoteCallFunc替代。
配置:
1、下载已封装好的tslconnect.py文件,
附件:附件:tslconnect.py
2、打开tslconnect.py文件,在对应的位置填入用户本机电脑中的天软根目录路径,天软账号及密码
分别对应变量:path、userid、password,位置如下:
设置好之后,保存即可。
tslconnect模块说明
天软交互说明:FAQ:
2019-05-08-应用专题-第三方交互07:天软平台和PYTHON的交互
根据天软已有的功能模型进行重新封装,模块中含以下接口:
1.
tslconnect()
说明:连接天软服务器,若当前已有连接,则返回0,否则进行连接服务器操作,若连接失败,则会尝试再试连接,直到连接成功为止,尝试10次都失败,则返回报错信息。
返回:连接成功时,返回0,不成功时返回报错信息。
2.
tslRemoteExecute 调用天软语句,用法与原接口RemoteExecute保持不变
3.
tslRemoteCallFunc 调用天软函数,用法与原接口RemoteCallFunc保持不变
在原模块的基础上新增自动登录天软服务器的功能,其逻辑是:
在执行交互前,先调用tslconnect()再执行RemoteExecute或RemoteCallFunc。
即,在执行天软交互时,先自动连接并保证当前是已连接的状态后再执行天软语句或函数。
4.
tslDisConnect() 主动断开连接,用法与功能同原模块的Disconnect,在多个任务完成调用天软后,可调用一次该函数对连接进行断开。
使用范例:在python程序中,多次调用天软的应用
python代码:
#导入tslconnect模块
import tslconnect as tsl
#直接调用tslRemoteExecute或tslRemoteCallFunc做交互操作,不用关注连接操作
data1=tsl.tslRemoteExecute("return 'login success';",{})
print(data1)
data2=tsl.tslRemoteCallFunc("stockName",['SZ000002'],{})
print(data2[1].decode("gbk"))
#取个股的行情数据
stockid='SH600000'
begt=20190701
endt=20190710
ts_str=""" StockId:='%s';
begt:=%dT;
ENDT:=%dT;
setsysparam(PN_Cycle(),cy_day());
return select ['StockID'],datetostr(['date']) as 'date',['close'] from markettable
datekey Begt to Endt+0.99999 of StockId end;
"""%(stockid,begt,endt)
data3=tsl.tslRemoteExecute(ts_str,{})
print(data3)
#程序结束前,断开与天软的连接,避免账号的占用
tsl.tslDisConnect()
执行结果: