gpt4 book ai didi

python - 在处理 Flask 请求的同一台服务器上运行 Celery 任务

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:21 24 4
gpt4 key购买 nike

我有一个设置,其中有多个服务器同时运行我的 Flask 应用程序和 Celery worker。 Flask 路由在本地处理文件上传,并将 Celery 任务排队以将该文件上传到 CDN。

Celery 任务可以由集群中的任何节点处理。如果 Celery 任务由与处理 Flask 路由的节点不同的节点处理,则将找不到文件并且任务将失败。

如何确保 Celery 任务在处理 Flask 路由的同一节点上运行?

最佳答案

如果您希望处理上传的服务器处理后台作业,那么您根本不需要 Celery。当您需要分发和排队任务时,Celery 很好,但您描述的是本地的,并且是在上传之后立即执行的。

不是 Celery 任务,而是在本地生成一个进程来处理后台作业。

from multiprocessing import Process
from flask import Flask, render_template, request, redirect

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
f = request.files['file']
Process(target=handle_file, args=(f,)).start()
return redirect(request.path)

return render_template('upload.html')

def handle_file(f):
print(f.read())

if __name__ == '__main__':
app.run('localhost')

如果你想坚持使用 Celery,你可以放弃在本地保存文件并将文件数据作为参数传递给任务,所以无论哪个服务器处理上传,处理任务的服务器总是拥有数据.如果文件很大,可能会出现性能问题。

@celery.task
def upload(data):
...

upload.delay(file.read())

关于python - 在处理 Flask 请求的同一台服务器上运行 Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32272418/

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