2016-09-16 23 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