python - Flask 多处理在进程完成之前不会返回响应

标签 python linux nginx flask uwsgi

我有一个带有代码块的 flask 应用程序:

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

为什么会这样?

提前致谢。

编辑:我也尝试将守护进程设置为 True,但结果仍然相同。 Python版本为3.6

编辑:应用程序的进程由supervisord处理,由uwsgi执行,并且位于通过uwsgi_pass传递的nginx后面(如果有帮助的话)。

编辑:我想补充一点,我认为这可能是 Nginx 的问题。正如评论中指出的,这不太可能是 Flask 应用程序。现在最上面的是Nginx。

我想要解决的真正问题是:我正在向 AWS API Gateway 发送请求,该网关会触发 Lambda 函数,然后该函数向 Nginx 后面的 Linux 服务器中的 API 发出请求。 Flask 应用程序工作正常,除了当它生成进程时,控件似乎没有返回。当我在 Lambda、Postman 或 python 脚本中调用 API 时,会发生这种情况。

最佳答案

我认为您想要做的是分离您正在创建的流程 - 在这种情况下,我建议尝试此答案中的双叉方法。

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

关于python - Flask 多处理在进程完成之前不会返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423018/

相关文章:

python - 使用 Python 绘制 ODE、等倾线

python - 防止池进程导入 __main__ 和全局变量

Python Pandas 数据框 : Normalize data between 0. 01 和 0.99?

linux - 如何制作ARM9自定义设备模拟器?

javascript - 如何定义 Node.js 应用上下文路径?

python - 如何在 Tornado 异步 TCP 中同时处理多个命令以从套接字读取?

java - Linux 中的 SMTP/POP3 客户端

linux - 转发 Ctrl+C &c。超过 "ssh -tt"使用来自 heredoc 的命令运行

tomcat - nginx (https) 到 tomcat (https)

TCPing 时 Azure VM 端口关闭