def __init__(self, strFullTaskName, strTaskParam="", lTaskParam1=0, lTaskParam2=0, iCheckEveryMilSecond=1000, iIdleCheckEveryMilSecond=5000, bExRemoteCallMe=False, bTemporyUse=False): # 获得最后唯一ID self.s_lUniqueID = FiberMang.GetUniqueInstanceID() self.s_strFullTaskName = strFullTaskName self.s_strTaskParam = strTaskParam self.s_lTaskParam1 = lTaskParam1 self.s_lTaskParam2 = lTaskParam2 # 时间检查 self.s_iCheckEveryMilSecond = iCheckEveryMilSecond # 每单位时间检查一次 self.s_iIdleCheckEveryMilSecond = iIdleCheckEveryMilSecond # 如果持续空闲,则休眠这个时间段 self.s_lastFreeMilTimeDiff = CSkBot_Common_Share.CSkBot_MilTimeIdentify( self.s_iCheckEveryMilSecond) # 空闲检查 self.s_lastContinueIdle_MilTimeDiff = CSkBot_Common_Share.CSkBot_MilTimeIdentify( self.s_iIdleCheckEveryMilSecond) # 空闲检查 self.s_bLastBusyStatus = False self.s_bInContinueCheckFreeStatus = False self.s_iKeepIdleCheckFitCount = 0 # 持续统计空闲次数 self.s_iMaxKeepIdleCheckCount = 20 # 最多持续空闲20次 self.s_parentFiberMang = None self.s_bExRemoteCallMe = bExRemoteCallMe self.s_bTemporyUse = bTemporyUse
def ScheduleExecDelayPostMsg(self, iMaxWaitMilSecond): bLooping = True maxWaitTimeCheck = CSkBot_Common_Share.CSkBot_MilTimeIdentify( iMaxWaitMilSecond) while (bLooping): # 队列有内容? if (len(self.s_listPostMsgStore) == 0): bLooping = False else: # 时间超时? if (maxWaitTimeCheck.CheckTimeDiff()): bLooping = False else: # 此处对每个单元进行执行Send nextMsgPostUnit = self.s_listPostMsgStore.pop(0) if (nextMsgPostUnit.s_lDestTaskUID): self.ExecTaskUnitMessage_UID( fromSenderUnit=nextMsgPostUnit.s_senderRequestUnit, lTaskUID=nextMsgPostUnit.s_lDestTaskUID, messageID=nextMsgPostUnit.s_lMessageID, bSendOrPost=True, strMsgJsonParam=nextMsgPostUnit.s_strMsgJsonParam, strMsgParam=nextMsgPostUnit.s_strMsgParam, lMsgParam1=nextMsgPostUnit.s_lMsgParam1, lMsgParam2=nextMsgPostUnit.s_lMsgParam2) elif (nextMsgPostUnit.s_strDestTaskFullName): if (nextMsgPostUnit.s_strTaskParam): self.ExecTaskUnitMessage_StrParam( fromSenderUnit=nextMsgPostUnit. s_senderRequestUnit, strFbUnitFullName=nextMsgPostUnit. s_strDestTaskFullName, strDestTaskParam=nextMsgPostUnit. s_strTaskParam, messageID=nextMsgPostUnit.s_lMessageID, bSendOrPost=True, strMsgJsonParam=nextMsgPostUnit. s_strMsgJsonParam, strMsgParam=nextMsgPostUnit.s_strMsgParam, lMsgParam1=nextMsgPostUnit.s_lMsgParam1, lMsgParam2=nextMsgPostUnit.s_lMsgParam2) else: self.ExecTaskUnitMessage_LongParam( fromSenderUnit=nextMsgPostUnit. s_senderRequestUnit, strFbUnitFullName=nextMsgPostUnit. s_strDestTaskFullName, lTaskParam1=nextMsgPostUnit.s_lTaskParam1, lTaskParam2=nextMsgPostUnit.s_lTaskParam2, messageID=nextMsgPostUnit.s_lMessageID, bSendOrPost=True, strMsgJsonParam=nextMsgPostUnit. s_strMsgJsonParam, strMsgParam=nextMsgPostUnit.s_strMsgParam, lMsgParam1=nextMsgPostUnit.s_lMsgParam1, lMsgParam2=nextMsgPostUnit.s_lMsgParam2) pass
def __init__(self, strSelfClientID): self.strMyFullName = strSelfClientID + Exec_API_CallFiber.s_g_strMySubFixFiberName FiberUnit_Base.__init__(self, self.strMyFullName, bExRemoteCallMe=True) self.s_TimerSend = CSkBot_Common_Share.CSkBot_TimeIdentify(10) self.s_tobe_RunExecMsg = { } # 等待调度运行的,远端执行消息. key=msgID, 内容=CUTRC_NATs_Comu_RunMessageUnit。 self.s_finish_RunExecMsg = { } #已经完成的执行消息. key=msgID, 内容=完成返回结果 FiberMsgRet self.s_runningMsgID = "" self.s_runningRemoteExecMsgID = "" self.s_runningMsgContent = None # 正在运行的消息内容
def ExecFiberCmd(self, strDestFiberName, messageID, strDestFiberParam="", lDestFiberParam1=0, lDestFiberParm2=0, strMsgJsonParam="", strMsgParam="", lMsgParam1=0, lMsgParam2=0): strExecMsgUID = g_runTinyBrainCore.ExecAPICallFiber.RequestExecCmd( strDestFiberName, messageID, strDestFiberParam=strDestFiberParam, lDestFiberParam1=lDestFiberParam1, lDestFiberParm2=lDestFiberParm2, strMsgJsonParam=strMsgJsonParam, strMsgParam=strMsgParam, lMsgParam1=lMsgParam1, lMsgParam2=lMsgParam2) failTimeCheck = CSkBot_Common_Share.CSkBot_TimeIdentify(30) # 循环查询 while (Global_TinyBrainCore.IsGlobalRunning()): if (failTimeCheck.CheckTimeDiff()): # 是否超时? break g_runTinyBrainCore.TimerCheck() bTaskFinish, execCmdRet = g_runTinyBrainCore.ExecAPICallFiber.QueryExecCmdFinish( strExecMsgUID) if (bTaskFinish): return execCmdRet # 取消 g_runTinyBrainCore.ExecAPICallFiber.CancelExecCmd(strExecMsgUID) # 此处返回失败 failMsgRet = FiberMsgRet(FiberMsgRet.s_g_iExecResult_Fail) return failMsgRet
def __init__(self): self.s_dictUIDFiberTasks = { } # 唯一ID对应的任务字典。 key=long, 内容=FiberUnit_Base self.s_dictStrParamFiberTasks = { } # 字符串纤程任务字典. key=string, 内容=FiberUnit_Base self.s_dictLongLongParamFiberTasks = { } # 长参数任务字典. key=string, 内容=FiberUnit_Base self.s_listPostMsgStore = [] # postMessge的队列 self.s_iMaxContinueFreeCount = 10 # 空闲10次就大休眠一次 self.s_iLastContinueFreeCount = 0 # 上次连续休眠的时间 self.s_iFreeIdleMilSecond = 1000 # 休眠的等待时间 self.s_bNeedSleep = False self.s_listFiberTaskUnit = [] # 任务单元队列 self.s_lastFreeMilTimeDiff = CSkBot_Common_Share.CSkBot_MilTimeIdentify( self.s_iFreeIdleMilSecond) # 空闲检查 self.s_store_listNeedSendRemoteMsgTask = [ ] # 存储需要发送到远程任务 CUTRC_NATs_Comu_RunMessageUnit self.s_bUnitDictModified = False # 单元字典有否改变? pass
strNLKAnalyerName="lessnet.FiberExec.NLKer" lMsgID_NLKer_SenterToWord=100001 # strParam文字内容, 回复:strValue分词json def __init__(self): PyExCallAPI_Base.__init__(self) pass def ExecNLK(self, strInput): execCmd=self.ExecFiberCmd( strDestFiberName=self.strNLKAnalyerName, messageID=self.lMsgID_NLKer_SenterToWord, strMsgParam=strInput) return execCmd.s_strRetValue if __name__ == "__main__": Global_TinyBrainCore.InitBrainCore() stringArray=["这是一个测试单词句子", "中国的GDP正在持续增长", "今天太阳高照明天马路繁忙"] pyAPIExec = pyAPI_NLK() timerSend = CSkBot_Common_Share.CSkBot_TimeIdentify() while(Global_TinyBrainCore.IsGlobalRunning()): if(timerSend.CheckTimeDiff()): for eachStr in stringArray: strValue=pyAPIExec.ExecNLK(eachStr) CTYLB_Log.ShowLog(0, "result", strValue) pass time.sleep(0.1) Global_TinyBrainCore.TimerCheck()
def __init__(self): super(AIOSWebOSFiber, self).__init__(AIOSWebOSFiber.FiberName, bExRemoteCallMe=True) self.sendTimeIdentify = CSkBot_Common_Share.CSkBot_TimeIdentify( 10) #10秒发送超时检测
def Run(): timeIdentify = CSkBot_Common_Share.CSkBot_TimeIdentify() utrcClinet = TYFiberBot_Mang_NATS_UTRClient_Instance() utrcClinet.AddFiberUnit(AIOSWebOSFiber()) utrcClinet.Run()
def TimerCheck(self): bRetTaskBusy = False # 返回状态值 bExecTask, bExecTimerCheck = False, False # 执行任务,执行时间检查 # 是否为N毫秒检查一次? if (self.s_iCheckEveryMilSecond): if (self.s_lastFreeMilTimeDiff.CheckTimeDiff()): bExecTimerCheck = True else: bExecTimerCheck = True if (bExecTimerCheck): #上次繁忙吗?这次直接执行 if (self.s_bLastBusyStatus): bExecTask = True else: # 上次还在进行持续空闲检查? if (self.s_bInContinueCheckFreeStatus): if (self.s_lastContinueIdle_MilTimeDiff.CheckTimeDiff()): bExecTask = True else: bExecTask = True if (bExecTask): # 执行,时间检查 startTimeDiffCheck = CSkBot_Common_Share.CSkBot_MilTimeIdentify( ) try: bRetTaskBusy = self.v_Base_TimerCheck() except Exception as e: CTYLB_MainSys_MiscFunc.ShowExceptionInfo(e) bRetTaskBusy = True curTimeDiff = startTimeDiffCheck.GetStartTimeDiff() iTotalMilSecond = curTimeDiff.microseconds if (iTotalMilSecond > 3000): strFullParam="UID:%d, strParam:%s, lParam:%d-%d" % \ (self.s_lUniqueID, self.s_strTaskParam, self.s_lTaskParam1, self.s_lTaskParam2) CTYLB_Log.ShowLog(0, self.s_strFullTaskName, ("time:%d, " % (iTotalMilSecond / 1000)) + strFullParam) if (bRetTaskBusy): # 如果繁忙,清空所有状态 self.s_bInContinueCheckFreeStatus = False self.s_iKeepIdleCheckFitCount = 0 else: # 如果上次也为空闲 if (self.s_bLastBusyStatus): self.s_iKeepIdleCheckFitCount += 1 if (self.s_iKeepIdleCheckFitCount >= self.s_iMaxKeepIdleCheckCount): # 持续空闲,进行空闲持续状态 self.s_bInContinueCheckFreeStatus = True self.s_lastContinueIdle_MilTimeDiff.ResetToNow() self.s_bLastBusyStatus = bRetTaskBusy return bRetTaskBusy
def __init__(self, config_file="config/config.yaml", funcCallBack=None): TYFiberBot_Mang_NATS_Instance_Base.__init__(self, config_file, funcCallBack) # 如果有更新,2秒发一次。否则,半分钟发一次 我的单元列表 self.s_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify(2) self.s_AlwaysSendFbUnitList_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify( 30) self.s_FBotSendFbUnitList_TimerCheck = CSkBot_Common_Share.CSkBot_TimeIdentify( 30) CLessTYBotFrameThread.SetDefaultConsoleCompatible( FBotV4.environment_event_handle) # 初始化,加载FBot的配置 strFBotUTRC_Server = CTylb_Bot_Exec_Frame.ReadIniSectionValue( config_file, Share_UTRC_CfgDef.g_str_section_FiberUTRC, Share_UTRC_CfgDef.g_str_key_FBot_UTRC_Server, "") self.s_utrcFBot = None self.s_toBeSend_FBot_PackageArray = [] # 等到发送给伙伴FBot的数据包队列 self.s_timeDiff_SendInit = CSkBot_Common_Share.CSkBot_TimeIdentify(1) if (strFBotUTRC_Server): loopCallBack = [] if (self.s_funcTimerCallBack): loopCallBack.append((self.s_funcTimerCallBack)) loopCallBack.append(self.LoopEventCallBack) connectUTRCFBotSrvAddr = { strFBotUTRC_Server: [Share_UTRC_CfgDef.g_iFbUTRC_AcceptExecClient_ListenPort] } self.s_utrcFBot = FBotV4(connect_to_socks=connectUTRCFBotSrvAddr, loop_event_callbacks=loopCallBack, config_file=config_file) self.s_utrcFBot.add_connect_to_callbacks( sock_id=strFBotUTRC_Server, sock_port=Share_UTRC_CfgDef. g_iFbUTRC_AcceptExecClient_ListenPort, cmd_id=Share_UTRC_CfgDef.g_iFBot_Cmd_Nop_SendEcho_To_Srv, callback=self.OnFBot_InitCall_LoopSendToSrv, is_auto_callback=True) self.s_utrcFBot.add_connect_to_callbacks( sock_id=strFBotUTRC_Server, sock_port=Share_UTRC_CfgDef. g_iFbUTRC_AcceptExecClient_ListenPort, cmd_id=Share_UTRC_CfgDef.g_iFBot_Cmd_NeedExecCmd_To_Client, callback=self.OnFBot_Client_Cmd_NeedExecCmd, is_auto_callback=False) self.s_utrcFBot.add_connect_to_callbacks( sock_id=strFBotUTRC_Server, sock_port=Share_UTRC_CfgDef. g_iFbUTRC_AcceptExecClient_ListenPort, cmd_id=Share_UTRC_CfgDef.g_iFbUTRC_Cmd_Reply_Message_Result, callback=self.OnFBot_Client_Cmd_ReplyMessageResult, is_auto_callback=False) pass
def __init__(self): self.s_timeIdentify = CSkBot_Common_Share.CSkBot_TimeIdentify() self.s_utrcClient = TYFiberBot_Mang_NATS_UTRClient_Instance()
def __init__(self): FiberUnit_Base.__init__(self, self.s_g_strMyFiberName, bExRemoteCallMe=True) self.s_TimerSend = CSkBot_Common_Share.CSkBot_TimeIdentify(8) self.s_dict_msgResult = {} # 消息结果
def __init__(self, config_file="config/config.yaml", funcCallBack=None): self.s_collect_FbNameDict_Mang = Collect_FbNameDict_Mang() # 集合纤程单元的管理 # 临时存储处理FBot-客户端的Fb单元列表 字典 self.s_recvFBotClientFibersDicts={} # 接收到FBot客户端 纤程名字典. key=FBot客户端名字, 内容=CUTRC_NATs_ComuFiberList TYFiberBot_Mang_UTRC_NATS_Instance.__init__(self, config_file, funcCallBack) # 保存本地变了 iFbUTRC_ListenPeer_Port = Share_UTRC_CfgDef.g_iFbUTRC_ListenPeer_Port # 纤程TRC服务器的监听端口 # 线程UTRC服务器,对FBot客户端的监听端口 iFbUTRC_AcceptExecClient_ListenPort=Share_UTRC_CfgDef.g_iFbUTRC_AcceptExecClient_ListenPort connectSrvAddr={} strPeerFbUTCServerAddr = CTylb_Bot_Exec_Frame.ReadIniSectionValue(config_file, Share_UTRC_CfgDef.g_str_section_FiberUTRC, Share_UTRC_CfgDef.g_str_key_FbUTRC_FBot_PeerServerAddr, "") if(strPeerFbUTCServerAddr): connectSrvAddr[strPeerFbUTCServerAddr] = [iFbUTRC_ListenPeer_Port] # 创建FBot服务器 loopCallBack=[] if(self.s_funcTimerCallBack): loopCallBack=[self.s_funcTimerCallBack] loopCallBack.append(self.LoopEventCallBack) self.s_RunFBotV4=FBotV4(listen_socks=[iFbUTRC_ListenPeer_Port, iFbUTRC_AcceptExecClient_ListenPort], listen_accpet_callback=self.FBot_Listen_Accept_Callback, config_file=config_file, loop_event_callbacks=loopCallBack, connect_to_socks=connectSrvAddr) # 针对 PeerSrv的消息处理 self.s_RunFBotV4.add_listen_callbacks( Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_BroadCast_Peer_FbUnitNames, self.OnListen_Recv_Peer_BroadCastFbUnitName) self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_NeedPeerFBot_Run_Message, self.OnListen_Recv_Peer_ExecRunMessage) # 针对 FBot-ExecClient - g_iFbUTRC_AcceptExecClient_ListenPort 的消息处理. client发到utrc服务端的 self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Nop_SendEcho_To_Srv, self.OnListen_Recv_Client_Nop_SendEcho) self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFbot_Cmd_TransExecMsg_To_Srv, self.OnListen_Recv_Client_TransExecMsg) self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Report_FbUnitList_To_Srv, self.OnListen_Recv_Client_Report_FbUnitList) self.s_RunFBotV4.add_listen_callbacks(Share_UTRC_CfgDef.g_iFBot_Cmd_Reply_ExecMsg_To_Srv, self.OnListen_Recv_Client_Reply_execMsg) if(strPeerFbUTCServerAddr): self.s_RunFBotV4.add_connect_to_callbacks( sock_id=strPeerFbUTCServerAddr, sock_port=Share_UTRC_CfgDef.g_iFbUTRC_ListenPeer_Port, cmd_id=Share_UTRC_CfgDef.g_iPeerFbUTRC_Cmd_BroadCast_Peer_FbUnitNames, callback=self.OnFBot_PeerSrv_BroadCastPeerFbUnitName, is_auto_callback=True) # 初始化Fiber管理 # 对信息传递 以纤程单元实现。收到nats服务器信息,判断是否在本地队列。不在,则发送给tybot self.s_TimerDiff_PeerFBotSrv_FbUnit_Notify = CSkBot_Common_Share.CSkBot_TimeIdentify(30) self.s_toBeSend_PeerFBot_FbNames_Package = None # 等待发送的广播名字数据包 self.s_toBeSend_PeerFBot_PackageArray = [] # 等到发送给伙伴FBot的数据包队列 self.s_toBeSend_FBotClient_PackageDict={} # 等待发送给 客户端的 Package. key=名字, 内容=[] pass
def __init__(self): self.s_utrcClient = TYFiberBot_QueryUTRCClient_Instance(funcCallBack= self.funcCheckCallBack) self.s_TimerSend=CSkBot_Common_Share.CSkBot_TimeIdentify()
def __init__(self): FiberUnit_Base.__init__(self, self.s_g_strMyFiberName, bExRemoteCallMe=True) self.s_TimerSend=CSkBot_Common_Share.CSkBot_TimeIdentify() self.s_dict_AllUTRCClientInfo={}