簡體   English   中英

將 Multiprocessing 與 Python Flask 2.7 一起使用會掛起主應用程序,直到進程完成

[英]Using Multiprocessing with Python Flask 2.7 hangs the main app until process completes

我已經建立了一個使用 Flask-SocketIO 的 Python (2.7) Flask 應用程序。 我正在運行這個應用程序有點像這樣


eventlet.monkey_patch(socket=True, select=True, subprocess=True)
socketio = SocketIO(app, cors_allowed_origins='*',
                    async_mode='eventlet')
socketio.run(app, host='0.0.0.0', debug=False,
                 port=5100)


現在,該應用程序運行良好。 然而,對於 1 個 API 調用,我需要利用 Python 微處理模塊。

這是API方法



        jobs = []
        queue = Queue()

        for idx, val in enumerate(myArray):

            process = pool(target=self.getEachNode,
                              args=(val['ip'], self.subscriberId, queue))
            jobs.append(process)


        try:
            print('waiting for someone to inqueue')
            result = queue.get(timeout=120)
            print('finally someone inqueued..................')
            print(result)
        except Exception as ex:
            print('Exception occurred while waiting for queue')

        # terminate all jobs
        for j in jobs:
            j.terminate()

        for j in jobs:
            j.join()

myArray 將有 10 個項目。 所以這個請求會運行 10 次。

每當發生這種情況時,python 控制台都會告訴我一個新應用程序已啟動(因為再次運行以下代碼)


if __name__ == "__main__":

    app.wsgi_app = DispatcherMiddleware(
        app.wsgi_app, {getenv("API_BASEURL", "/api"): app})
    socketio.run(app, host='0.0.0.0', debug=False,
                 port=5100, use_reloader=False)

print('python server running on port 5100')

現在實際發生的是,當這些進程運行時,主應用程序掛起。 我無法訪問任何其他 API 方法。 它基本上是阻塞的。 這也會導致套接字斷開連接,因為服務器被我的理解阻止了。

我想要的只是讓這 10 個任務異步執行。 我應該為此使用Pool嗎?

Pool 有一個apply_async方法,有幫助嗎?

另外,我只想要 1 個響應,我不需要全部完成(不需要 Promise.all)。

順便說一句,我不能使用任何 Python 3 功能。

我最終使用了 Celery / Message Queue,它允許我們輕松管理 Flask 中的異步任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM