def runChildProcess(): """子进程运行函数""" print('-' * 20) # 创建日志引擎 le = LogEngine() le.setLogLevel(le.LEVEL_INFO) le.addConsoleHandler() le.info(u'启动行情记录运行子进程') ee = EventEngine2() le.info(u'事件引擎创建成功') me = MainEngine(ee) me.addGateway(ctpGateway) me.addApp(dataRecorder) le.info(u'主引擎创建成功') ee.register(EVENT_LOG, le.processLogEvent) ee.register(EVENT_ERROR, processErrorEvent) le.info(u'注册日志事件监听') me.connect('CTP') le.info(u'连接CTP接口') #获取全部合约信息并自动订阅 contracts = me.getAllContracts() while len(contracts) == 0: sleep(1) contracts = me.getAllContracts() print(u"共获取" + str(len(contracts)) + u"条合约信息") for contract in contracts: if contract.productClass == u"期货": req = VtSubscribeReq() req.symbol = contract.symbol me.subscribe(req, contract.gatewayName) me.getApp(dataRecorder.appName).tickSymbolSet.add(req.symbol) while True: sleep(1)
def runChildProcess(): """子进程运行函数""" # print '-'*20 # 创建日志引擎 le = LogEngine() le.setLogLevel(le.LEVEL_INFO) le.addConsoleHandler() le.addFileHandler() le.info(u'启动行情记录运行子进程') # 创建主引擎 me = MainEngine() ee = me.eventEngine ee.register(EVENT_LOG, le.processLogEvent) ee.register(EVENT_CTA_LOG, le.processLogEvent) ee.register(EVENT_ERROR, processErrorEvent) try: # 添加交易接口 try: me.addGateway(ctpGateway) except: pass # 添加上层应用 me.addApp(riskManager) me.addApp(dataRecorder) #fix: 当服务端初始化完毕后再开启rpcService #me.addApp(rpcService) me.addApp(ctaStrategy) me.addApp(spreadTrading) me.addApp(algoTrading) le.info(u'主引擎创建成功') # 自动建立MongoDB数据库 me.dbConnect() le.info(u'connect MongoDB') # 自动建立CTP链接 me.connect('CTP') le.info(u'连接CTP接口') # 取仓位信息 me.qryPosition("CTP") while not me.getAllContracts(): sleep(5) le.info(u'收集合约信息...') sleep(3) le.info(u'合约信息中数量: %s' % len(me.getAllContracts())) # 及时保存数据引擎里的合约数据到硬盘 me.dataEngine.saveContracts() #服务端初始化完成 #开启RPC me.addApp(rpcService) le.info(u'开启RPCService') ''' bug-fix: 休息,以便于客户端连接上来收CTP信息 ''' sleep(5.) #CTP连接完成,发送重启信号 event = Event(EVENT_CTP_RESTARTED) me.eventEngine.put(event) le.info(u'通知客户端CTP RESTART') while True: sleep(1) except KeyboardInterrupt: le.info(u"Keyboard interrupt in process") finally: le.info(u"cleaning up")