2016-09-16 28 views
0

开始无限的Python脚本我想从瓶请求中开始我的永不落幕的Python脚本:在新线程内瓶

def start_process(): 
    exec(open("./process/main.py").read(), globals()) 
    print("Started") 
    return 

,并要求:

@app.route("/start") 
    def start(): 
    from threading import Thread 
    thread = Thread(target=start_process, args=()) 
    thread.setDaemon(True) 
    thread.start() 
    return redirect(url_for('main')) 

main.py过程是一个小测试服务器,等待一些消息,但它只是挂起整个瓶子脚本(事实上,通过gunicorn,如果我发送CTRL-C,我可以看到子过程的输出)。

如何让main.py脚本单独启动?

回答

0

我还没有成功地从Flask内部启动长时间运行的线程,但以另一种方式开始,在线程中启动Flask并为其提供一种与其他线程通信的方式。

诀窍是沿

def webserver(coordinator): 
    app.config['COORDINATOR'] = coordinator 
    app.run(use_reloader=False) 
    # use_reloader=False is needed to keep Flask happy in a thread 

def main(): 
    coordinator = Coordinator() 
    ui = threading.Thread(target=webserver, args=(coordinator,)) 
    ui.start() 
    # start other threads, passing them coordinator 
    # start long-running tasks in main thread, passing it coordinator 

线的东西在哪里Coordinator使用threading设施(例如,LockQueue)保护访问共享数据或资源。您可以很容易地设置协调器,以支持工作线程阻塞,直到发出信号(来自处理程序),然后启动长时间运行的任务。

+0

它与我想要做的事情背道而驰,但它总是一种解决方案。 – Alessandro