[英]Flask multiprocessing does not return the response until a process is finished
我有一個帶有代碼塊的燒瓶應用程序:
if flag1 and flag2 and flag3:
logger.info("Creating new process")
p = Process(
target=some_function,
args=(
param1,
param2,
param3,
param4,
param5
),
daemon=False
)
p.start()
logger.info("Return Now")
return "OK", 200
現在, some_function 需要一段時間才能完成,我想在客戶端繼續工作時將響應返回給客戶端。
我到了記錄“立即返回”的地步,但它似乎還沒有返回。 似乎在發送響應之前等待進程完成。
我不是linux或python和flask方面的專家,但是當我使用普通的flask run或python -m app命令在Windows機器上測試它時它可以工作。
作為附加信息,我將它部署在帶有 uwsgi 的 linux 服務器中,並使用以下命令執行:
uwsgi --socket 127.0.0.1:9003 -w wsgi:app
為什么會這樣?
提前致謝。
編輯:我也試過將 daemon 設置為 True 但結果仍然相同。 Python 版本是 3.6
編輯:應用程序的進程由 supervisord 處理,它由 uwsgi 執行,並在 nginx 后面,如果有幫助,它會通過 uwsgi_pass 傳遞。
編輯:我想我可能想補充一下,我認為這可能與 Nginx 相關。 正如評論中所指出的,這極不可能是燒瓶應用程序。 現在最重要的是 Nginx。
我試圖解決的真正問題是:我正在向 AWS API Gateway 發送一個請求,它觸發一個 Lambda 函數,然后向 Nginx 后面的 Linux 服務器中的 API 發出請求。 燒瓶應用程序工作正常,除非它產生進程時,控件似乎沒有返回。 當我在 Lambda、Postman 或 Python 腳本中調用 API 時會發生這種情況。
我認為您要做的是分離您正在創建的流程 - 在這種情況下,我建議您嘗試使用此答案中的雙叉方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.