gpt4 book ai didi

django - 如何在 Django 中为 Celery 队列设置特定代理?

转载 作者:IT王子 更新时间:2023-10-29 06:04:05 24 4
gpt4 key购买 nike

我正在尝试将我当前的资源密集型视频处理队列移至单独的代理。我将我的默认代理 url 设置为使用 AMQP:

BROKER_URL = 'amqp://defaultaddress/'

我的新经纪人正在使用 Redis:

VIDEO_BROKER_URL = 'redis://videoaddress/'

如何将“视频”队列设置为使用 VIDEO_BROKER_URL 而不是默认的 BROKER_URL?

我已通读 Routing Tasks在 Celery 文档中,但我没有看到任何关于更改代理的信息。

最佳答案

首先,在 django-celery 中这似乎是不可能的,因为每个 django 实例(项目)只有一个 celery 应用程序实例。但目前 django-celery 已被弃用,在 celery 和 django 集成的新概念中,您实际上可以解决您的问题:

你必须创建两个不同的 celery 应用

common/celery.py

from __future__ import absolute_import
from celery import Celery

app = Celery('common',
broker='amqp://',
include=['common.tasks'])

if __name__ == '__main__':
app.start()

common/tasks.py

from __future__ import absolute_import
from common.celery import app


@app.task
def add(x, y):
return x + y

视频/celery.py

from __future__ import absolute_import
from celery import Celery

app = Celery('video',
broker='redis://',
include=['video.tasks'])

if __name__ == '__main__':
app.start()

视频/tasks.py

from __future__ import absolute_import
from video.celery import app


@app.task
def decode_video(path, from_format, to_format):
# do something

现在您可以从您的 Django 项目中导入这两个应用程序。例如:

from video.tasks import decode_video
from common.tasks import add

def some_view_function(request):
x = add.delay(2, 2)
decode_video.apply_async(('/1/2/3/video.mp4', 'mp4', 'avi'), countdown=5)
# return something

希望对您有所帮助。

关于django - 如何在 Django 中为 Celery 队列设置特定代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471089/

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