簡體   English   中英

Flask 多處理在進程完成之前不會返回響應

[英]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 時會發生這種情況。

我認為您要做的是分離您正在創建的流程 - 在這種情況下,我建議您嘗試使用此答案中的雙叉方法。

https://stackoverflow.com/a/49123627/6410635

暫無
暫無

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

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