我有一个带有代码块的 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 时,会发生这种情况。
最佳答案
我认为您想要做的是分离您正在创建的流程 - 在这种情况下,我建议尝试此答案中的双叉方法。
关于python - Flask 多处理在进程完成之前不会返回响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52423018/