在python中重新启动线程并检查异常

时间:2012-07-11 17:14:09

标签: python multithreading cherrypy python-multithreading

我已经绘制了一个我想要遵循的流程的流程图,但无法弄清楚如何实现这一目标。目前我有以下内容。

t1是一个数据库插入脚本,并不是一个很好的。

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

1 个答案:

答案 0 :(得分:0)

您可以在dict中创建状态表。每个节点都在一个执行其动作的函数中,然后返回下一个状态,如下所示:

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]()