当前位置: 首页 > 面试题库 >

如何保持多个独立的celery队列?

司寇山
2023-03-14
问题内容

我正在尝试将具有不同任务和工作人员的多个芹菜队列保留在同一Redis数据库中。实际上,只是在我的机器上只需要一台Redis服务器而不是两台Redis服务器的便利性问题。

我逐字阅读了celery教程文档,因为它是让它对我有用的唯一方法。现在,当我尝试使用稍作调整的名称/队列来复制所有内容时,它总是会出错。

注意-我是Python和Celery的新手,这显然是问题的一部分。我不确定哪个部分被命名为“任务”,而不是特殊词。

我精简的文档版本:运行celery -A tasks worker以生成工作程序。task.py包含celery = Celery('tasks',broker='redis://localhost')用于连接Celery的任务代码,并且@task()在我想延迟的功能之上。

在我的任务排队程序中…

from tasks import do_work
do_work.delay()

因此,鉴于上述所有情况,我需要采取什么步骤将其转变为两种类型的任务,分别在单独的队列和工作器上运行?例如,blue_tasks和red_tasks?

我尝试将所有任务实例更改为blue_tasks或red_tasks。但是,当我将blue_tasks排队时,我启动的red_tasks工作程序开始尝试对其进行处理。

我阅读了有关默认队列之类的信息,因此尝试了以下代码,但该代码无效:

CELERY_DEFAULT_QUEUE = 'red'
CELERY_QUEUES = (
    Queue('red', Exchange('red'), routing_key='red'),
)

附带说明,我不明白为什么celery workercelery尝试连接到默认amqp实例时出错,却celery -A tasks worker告诉celery连接到Redis。celery worker如果未指定任何内容,则尝试在工作程序上运行什么任务代码?


问题答案:

默认情况下,所有内容都进入一个名为的默认队列celerycelery worker如果未指定队列,这将进行处理)

假设您在中具有do_work任务功能django_project_root/myapp/tasks.py

您可以将do_work任务配置为驻留在自己的队列中,如下所示:

CELERY_ROUTES = {
    'myproject.tasks.do_work': {'queue': 'red'},
}

然后使用运行一个工作celery worker -Q red程序,它将仅处理该队列中的内容(使用调用的另一个工作程序celery worker将仅提取默认队列中的内容)

文档中的任务路由部分应说明所有内容。



 类似资料:
  • 问题内容: 我想保持与ManyToMany关系的实体。但是我在坚持过程中遇到了一些问题。 我的实体: 和 服务代码: 第一次,当我尝试使用UserRoles“ ROLE_USER”保留用户时,没有问题。插入User和UserRoles以及联接表。 我的问题是当我尝试使用相同的UserRoles保留第二个User时。我通过找到它来检查UserRoles是否存在( userRolesServices.

  • 我正在使用Spring、JPA和Hibernate。这是一个玩具示例,我正在使用它来调试一个更大的与JPA相关的问题。但是,这个试图持久化一个非常基本的实体的简单示例似乎创建了分离的对象。据我所知,在对象上调用应该将实体设置为由持久性上下文管理。但是,它不是,而且对此也不起作用。输出如下:: 为简洁起见省略了进口。 :: ::

  • 我有一个模式,其中每行包含多个数组列,我想独立于每个数组列爆炸。 假设我们有列: 我想要一个输出: 想法? (哦,我正在尝试这样做,所以我不必随着模式的变化而更新代码,也因为实际的模式有点大…) PS -支持这个非常相似但不同的问题,我无耻地从这个问题中窃取了示例数据。 编辑:@oliik赢了,但是,如果能用<code>df来实现这一点,那也太棒了。flatMap(主要是因为我仍然不去摸索<cod

  • 我有一个使用RabbitMQ构建的发布-订阅场景。有一个交换,其中消息由发布者发送,订阅该交换的任何使用者在其各自的队列中接收这些消息。这是一个扇出场景,其中有一个生产者,但有多个消费者。 现在我愿意在系统中集成一个死信队列,以便稍后处理被拒绝的消息。我的问题是 1)我应该为每个使用者配置一个单独的死信队列,还是应该有一个单独的死信队列来处理来自所有使用者的所有被拒绝的消息? 2)如果两者都有可能

  • 问题内容: 我觉得这是一个简单的用例,但也许我遗漏了一些东西… 我想有 两个单独的视图,它们分别由各自的菜单控制。当我单击一个菜单上的链接时(或为此),我只想更新其中一个视图。此外,只需在中反映两个视图之一。 我尝试 定义一些状态: 现在,从您最喜欢的控制器中按,然后看着它将废话换成。我还想省略此状态下的定义,因为只能在我定义的第一和第三状态之间进行更改。 我在index.html中彼此并排坐着: