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

Q:pyTSL接口中如何使用任务管理命令    

  • A:任务管理主要是对登录的账号、执行的在线任务或委托执行的任务进行查看或者终止任务等操作。
    详细说明:FAQ:Q:任务管理说明

    特别说明:
    1、pyTSL接口提供函数admin可以发送任务管理命令
       执行任务管理的命令不占用并发数,即并发任务满了也能执行
    2、admin命令的发送不能过于频繁(至少间隔3秒),否则会提示稍后执行

    使用说明:FAQ:天软pyTSL接口
    使用范例:
    python代码

    import time
    import pyTSL
    import re
    c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)# user为天软账号,password 为账号密码
    c.login()
    # 调用ou命令查看当前登陆情况
    ou=c.admin("ou")
    print(ou)

    # admin命令的发送不能过于频繁(至少间隔3秒),否则会提示稍后执行
    time.sleep(3)
    # 调用oa命令查看当前并发情况(程序执行)情况
    print(c.admin("oa"))

    time.sleep(3)
    # 调用info命令查看当前账号使用情况
    print(c.admin("info"))

    #解析得到当前已登陆数、当前已使用的并发数及账号的最大并发数
    # 1.对于当前登录情况进行解析,等到当前登录数
    def getUsers(ad_s):
        regex=re.compile("\d.*online")
        user=regex.findall(ad_s)
        regex1=re.compile("\d+")
        users=0
        for i in user:
            users+=int(regex1.findall(i)[0])
        return users

    # 2.解析账号的用户信息
    def getConcurrency(ad_s):
        ad_t=ad_s.split("\r\n")
        keys=ad_t[0].split(" ")
        values=ad_t[1].split(" ")
        key=[]
        value=[]
        for i in keys:
            if i != '' :
                key.append(i)
        for i in values:
            if i != '':
                value.append(i)
        s=0
        for i in range(len(value)):
            k=i-s
            if value[k][-1]== '/':
                value[k]+=value[k+1]
                value.pop(k+1)
                s+=1
        info={}
        for i in range(len(key)):
            info[key[i]]=value[i]
        return info

    print("已登录用户数:", getUsers(ou))
    print("在线执行个数/可在线执行个数:",getConcurrency(ou)["OLTASK"])



    范例展示:当在线执行数(即并发数)已满时,可通过admin发送命令查看账号使用情况
    python代码

    import threading
    import pyTSL
    import time

    def test1():
        print("子线程运行了。。。")
        c = pyTSL.Client("user", "passwprd", "tsl.tinysoft.com.cn", 443)  # user为天软账号,password 为账号密码
        print("登录状态:", c.login())
        ts_wg = c.call("admin_test")
        print(ts_wg.error(), ts_wg.value(), ts_wg.message())
        c.logout()

    def main():
        c = pyTSL.Client("user", "password", "tsl.tinysoft.com.cn", 443)  # user为天软账号,password 为账号密码
        print("登录状态:", c.login())
        #执行天软代码打印当前时间
        print("当前时间:", c.exec(code="return datetimetostr(now());").value())
        #执行任务管理命令-打印当前账号使用情况
        print(c.admin("ou"))

        #通过调用子线程与天软交互,开销掉天软账号当前所有的并发数
        t1 = threading.Thread(target=test1)
        t1.start()
        #睡眠5秒,不能使用任务管理命令过于频繁(至少间隔3秒),否则会提示稍后执行
        time.sleep(5)
        #再次执行天软代码:无法执行太多的在线任务
        dt = c.exec(code="return datetimetostr(now());")
        print("当前时间:", dt.value(), dt.error(), dt.message())
        #可执行书满了也能执行任务管理命令,显示可执行数满了,调用子线程登录数加1
        print(c.admin("ou"))
        print("睡眠70秒")
        time.sleep(70)
        #子线程执行完再执行天软代码,可正常执行  
        print("当前时间:", c.exec(code="return datetimetostr(now());").value())
        #执行任务管理命令,子线程执行完,可在线执行数发生了变更  
        print(c.admin("ou"))

    if __name__ == '__main__':
        main()

    调用的天软用户函数:调用后消耗掉本账号当前的全部的可执行数数

    Function admin_test();
    Begin
       rt:=array();
       for i:=0 to 4 do
       begin
          rt[i]:=#a(i);//天软网格调用(即并发)
       end
       return rt;
    end

    function a(i);
    begin
        echo "睡眠一分钟";
        sleep(60*1000);
        return "执行完成";
    end

    执行结果: