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

    执行结果: