gpt4 book ai didi

python - 返回 Flask 响应后如何执行函数(托管在 Heroku 上)?

转载 作者:IT王子 更新时间:2023-10-29 06:01:35 25 4
gpt4 key购买 nike

虽然我听说我需要使用一种叫做“作业队列”的东西,但我对此还是个新手,而且我很难把它全部设置好。在 flask 中返回响应后如何执行函数?你能指导我完成整个过程吗?

最佳答案

所以我发现它非常容易做到,在 heroku 上甚至更容易,问题是文档非常分散,对于刚刚发现工作队列的人来说,这可能会让人不知所措。

对于这个例子,我将使用 Heroku 上的 Reddis To Go 插件,所以您要做的第一件事是从你的仪表板。之后你设置你的 flask 应用程序也看起来像这样:

from flask import Flask
from rq import Queue
from redis import Redis
import os
import urllib.parse as urlparse

app = Flask(__name__)

def function_to_queue():
return "finished"
# Tell RQ what Redis connection to use and parse url from the global variable that was added by the addon
redis_url = os.getenv('REDISTOGO_URL')
urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(host=url.hostname, port=url.port, db=0, password=url.password)
q = Queue(connection=conn) #no args implies the default queue

@app.route('/')
def hello():
ob = q.enqueue(function_to_queue) #Add previously defined function to queue
return "k?"
if __name__ == '__main__':
app.run()

接下来,您必须使用以下代码创建名为 run-worker.py 的 python 脚本:

import os
import urllib.parse as urlparse
from redis import Redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL')
if not redis_url:
raise RuntimeError('Set up Redis To Go first.')

urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(host=url.hostname, port=url.port, db=0, password=url.password)

with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()

现在只需将 heroku 上的 Procfile 修改为如下所示:

web: gunicorn hello:app --log-file -
worker: python -u run-worker.py

部署它,确保你已经启动了 worker 和应用程序......然后你就完成了。希望这有助于其他人更快地了解工作排队。

关于python - 返回 Flask 响应后如何执行函数(托管在 Heroku 上)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31304739/

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