FAQ > 金融建模 > 第三方交互 > Python

Q:pyTSL接口中如何并发执行多个天软任务    

  • A:每个天软账号都有多个并发数权限(可执行个数,一般是5个),在构建天软任务时,可以充分使用这些并发数来提高效率。
      比如在需要天软完成多个独立运算或取数时,可以把该类任务分成多个,根据自己并发数的使用情况合理安排多个线程同时领取执行这些任务,可以提高交互效率。
      pyTSL接口中提供Batch类用于并发执行多个天软任务,使用时实例化该对象接口即可。
    使用说明:FAQ:天软pyTSL接口

    特别说明:
    1.可用key方法设置每次任务的关键字信息,查看执行进度及区分不同的任务,key关键字只能设置为字符串
    2.在使用并发时可以执行独立的任务,即可以同时执行多个不同的任务
    3.每次执行天软任务时可以指定pyTSL.Client 实例,可指定不同的账号及不同的服务器同时执行天软任务
    4.Batch类的第一个构造参数是指天软账号的并发数;
    5.在使用该并发时如果发生连接中断,原来提交的任务会被服务器取消,
     客户机这边会不断尝试重连,如果连上会重新提交那些任务。

    使用实例
    key方法的使用:在执行天软任务时指定关键字key即可在结果中调用
    python代码:

    import pyTSL
    #user为天软账号,password 为账号密码
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
    c.login()
    test = '''
        function get_value(stock);
        begin
           return stockname(stock);
        end;
        '''
    stocks = ['SH600000','SH600004','SH600006','SH600007']
    batch=pyTSL.Batch()
    for s in stocks:
        print("key:",s)
        t=batch.call(c, "get_value", s, code=test,key=s)

    for r in iter(batch):
        print(r.key(),r.value())
    #返回结果:


    同时执行不同的任务:
    python代码:

    import pyTSL
    #user为天软账号,password 为账号密码
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
    c.login()
    stocks = ['SH600000','SH600004','SH600006','SH600007']
    batch=pyTSL.Batch()
    for s in stocks:
        print("key:",s)
        if s == "SH600000" :
            batch.exec(c,"return '%s';"%s,key=s)
        else:
            batch.exec(c,"return stockname('%s');"%s,key=s)

    for r in iter(batch):
        print(r.key(),r.value())

    #返回结果:


    指定多个服务器执行天软任务:
    python代码:

    import pyTSL
    #user为天软账号,password 为账号密码
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)
    c.login()
    d = pyTSL.Client("user", "password", "wh.tinysoft.com.cn", 443)
    d.login()
    servers = ['tsl.tinysoft.com.cn','wh.tinysoft.com.cn']
    batch=pyTSL.Batch()
    for s in servers:
        print("key:",s)
        if s=="tsl.tinysoft.com.cn":
            batch.exec(c,"return TSAppserver();",service=c.server_list()[2],key=s)
        else :
            batch.exec(d,"return TSAppserver();",service=d.server_list()[2],key=s)

    for r in iter(batch):
        print(r.key(),r.value())

    #返回结果:


    导出数据使用实例:
    FAQ:Q:python如何把天软数据分批导入到本地