现在,我想将< code>register事件发布到某个特殊的交换,我可以使用celery远程检索和处理它。
实际上,我已经使用了send_task
函数来实现这一点,但是它必须传递task_name
来指示应该执行哪个任务并消费它。所以它似乎不太适合我的目标。
我想要的就是这样:
Exchange
发布注册
消息;主题
或route_key
并捕获消息,用于执行任务;队列
)例如,就像这个工作流一样:
注册:
>
generate_info
......
如果我需要非标准交换,我会这样做。
在我的celeryconfig中,我像这样指定该交换并将队列分配给它(在我的情况下,我需要fan out
交换):
from kombu.common import Broadcast
from kombu import Exchange, Queue
CELERY_QUEUES = (
Broadcast(name='queue_name', exchange=Exchange('queue_name', type='fanout')),
)
然后,我用celery multi生成worker,并将其分配给我的特定队列,如下所示:
celery multi start 1 -A my_project -Q:1 queue_name -c:1 1 (other options go here)
然后我可以将我的任务插入该队列,如下所示:
from my_project import my_fancy_task
my_fancy_task.apply_async(args=(x, y, z), queue="my_queue")
我不太理解您的具体使用情况,如果您需要一台主机上的工作程序使用一个队列中的任务,然后另一台主机上的工作程序使用另一个队列中的任务,那么只需将您的任务分成两个队列,并配置每台主机来启动工作程序,然后将它们分配到对您有意义的队列中。也许这将有所帮助:用RabbitMQ交换模糊话题
问题内容: 我正在运行Django 1.8 + Celery 4.0.2 Celery配置良好,可以在Redis后端本地运行Django任务。但是,当我尝试使用设置时,此设置无效。其他设置则不是这种情况,例如 具体来说,我看到的是 lib / python2.7 / site-packages / celery / app / task.py(520)apply_async()因此,CELERY_
我最近一直在用芹菜,我不喜欢它。它的配置是混乱的,过于复杂的,并且没有很好的文档记录。 我想从一个生产者向多个消费者发送带有芹菜的广播消息。使我困惑的是芹菜术语和底层传输rabbitMQ的术语之间的差异。 在RabbitMQ中,您可以使用单个扇出交换和多个队列来广播消息: 但在Celery中,术语都搞乱了:这里可以有一个广播队列,它向多个消费者发送消息: 我甚至不明白Celery广播队列应该如何工
我最近开始研究分布式计算以提高计算速度。我选择了芹菜。然而,我对一些术语不太熟悉。所以,我有几个相关的问题。 来自芹菜文档: ... Celery通过消息进行通信,通常使用代理在客户机和工作人员之间进行调解。为了启动任务,客户机将消息添加到队列中,然后代理将该消息传递给工作者。 什么是客户端(这里)?什么是经纪商?为什么消息通过代理传递?为什么 Celery 会使用后端和队列进行进程间通信? 当我
问题内容: 如何在Windows中运行celery worker而不创建Windows Service?有什么比喻吗? 问题答案: 它的完成方式与Linux中相同。将目录更改为包含celery任务的模块并调用效果很好。
问题内容: 我正在尝试创建Windows服务来启动Celery。我碰到了一篇使用Task Scheduler 来做的文章。但是,它似乎启动了许多芹菜实例,并不断消耗内存直到机器死机。有什么方法可以将其作为Windows服务启动吗? 问题答案: 我从另一个网站得到了答案。Celeryd(Celery的守护程序服务)作为粘贴应用程序运行,在这里搜索“ Paster Windows Service”会导
是否可以在Celery中使用不同的消息代理? 例如:我想使用PostgreSQL而不是RabbitMQ。