gpt4 book ai didi

python - 在 Flask 应用程序中使用 Gunicorn 和 Multiprocess

转载 作者:行者123 更新时间:2023-12-05 07:37:18 27 4
gpt4 key购买 nike

所以我正在尝试编写一个 Flask 应用程序,其中有一段代码每十分钟运行一次,用于下载和处理一个文件。我目前触发该代码块运行的方式是一个循环,该循环查看当前时间和上次代码块运行时间之间的差值是否大于十分钟。多处理用于与 Flask 正在执行的操作同时运行循环,所有设置都在我的 Flask 应用程序的 if __name__ == "__main__": 部分中设置。

不幸的是,由于该应用程序是使用 Gunicorn 运行的(使用 Heroku 运行该应用程序),if __name__ == "__main__": 没有解析为 true 并且循环甚至没有开始。在 if True: 中设置多进程只会抛出错误并执行 if __name__ =! "__main__": 没有抛出任何错误,但将 Flask 锁定在循环中,这意味着 Multiprocess 并没有真正按照它应该做的去做。真的很好奇为什么会这样,但我更大的问题是是否有更好的方法每十分钟运行一次我的代码块,这样我仍然可以轻松地将代码的结果传递给 Flask 或让 Multiprocess 正确运行并且会你介意详细说明吗? Flask 内置的东西,可能类似于 @app.before_first_request,不需要外部触发器会很好。我觉得好像我忽略了一些非常简单的事情,结果我正在做的事情过于复杂。

我的代码的简化版本如下,当 Gunicorn 在我的本地机器上不处理时它可以工作:

import time
from flask import Flask, request, jsonify
from multiprocessing import Process, Value

app = Flask(__name__)

@app.route('/')
def webhook:
respond_to_requests()

def record_loop(loop_on):
while True:
if loop_on.value == True:
check_time_and_run_code()
time.sleep(1)

if __name__ == "__main__":
recording_on = Value('b', True)
p = Process(target=record_loop, args=(recording_on,))
p.start()
app.run(debug=True, use_reloader=False)
p.join()

我在 Heroku 上使用 Gunicorn 运行此应用程序的 Procfile 包含 web: gunicorn app:app --log-file=-

在此先感谢您的帮助! :D

最佳答案

您似乎在网络进程中执行后台任务。 Web 进程旨在处理传入的请求。后台任务应单独运行。

您可以使用 Heroku Schedulercustom clock process定期运行后台任务。

关于python - 在 Flask 应用程序中使用 Gunicorn 和 Multiprocess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com