2012-07-11 87 views
1

我已经绘制出了一个流程图,我想遵循,但无法弄清楚如何执行此操作。目前我有以下几点。重新启动Python中的线程并检查异常

t1是一个数据库插入脚本,不是cherrypy。

def main(): 
    thread = ThreadUrl(queue) 
    thread = thread() 
    thread.start() 
    cherrypy.config.update({'server.socket_host': '0.0.0.0', 
          'server.socket_port': 2970}) 
          #'server.thread_pool': 100}) 
    queue.join() 
    cherrypy.engine.start() 
    while True: 
     if thread.isAlive(): 
      try: 
       cherrypy.engine.start() 
      except Exception: 
       print ('Started cherrypy already.') 
      print ('I am alive.') 
     else: 
      try: 
       thread.exit() 
      except Exception: 
       print ('Already killed this thread.') 
      print ('I am dead.') 
      try: 
       cherrypy.engine.stop() 
      except Exception: 
       print ('Already stopped cherrypy.') 
      try: 
       thread.start() 
      except Exception: 
       print (sys.exc_info()[1]) 

if __name__ == '__main__': 
    main() 

I would like to follow this flow chart

+0

这似乎......有点令人费解,因为'cherrypy.engine'已经实现了自己的状态机,并且只有在调用'cherrypy.engine.block()'时才会阻塞调用线程。你想用包装线完成什么? – fumanchu 2012-07-11 19:55:01

+0

嗨,对不起,我忘了在描述中添加一行有点重要,t1是一个数据库插入脚本不cherrypy。 – 2012-07-11 21:20:44

回答

0

你可以在一个字典创建一个状态表。每个节点将在执行其行动的功能,然后返回下一个状态,这样的事情:

def start_t1(): 
    # Start t1. 
    return "start cherrypy" 

def start_cherrypy(): 
    # Start Cherrypy. 
    return "is t1 alive?" 

def is_cherrypy_alive(): 
    # Check whether Cherrypy is alive. 
    if alive: 
     return "stop cherrypy" 
    return "start t1" 

actions = { 
    "start t1": start_t1, 
    "start cherrypy": start_cherrypy, 
    "is t1 alive?": is_t1_alive, 
    "is cherry pie alive?": is_cherrypy_alive, 
    ... 
} 

state = "start t1" 
while True: 
    state = actions[state]() 
+0

嗨,对不起,我忘了在描述中添加一行有点重要,t1是一个数据库插入脚本不cherrypy。 – 2012-07-11 21:20:52

相关问题