Python 在多台机器上执行芹菜任务
我有一个服务器,在那里我安装了一个RabbitMQ代理和两个芹菜消费者(main1.py和main2.py)都连接到同一个代理 在第一个使用者(main1.py)中,我实现了一个芹菜节拍,它在特定队列上多次发送不同的任务:Python 在多台机器上执行芹菜任务,python,rabbitmq,task,celery,celerybeat,Python,Rabbitmq,Task,Celery,Celerybeat,我有一个服务器,在那里我安装了一个RabbitMQ代理和两个芹菜消费者(main1.py和main2.py)都连接到同一个代理 在第一个使用者(main1.py)中,我实现了一个芹菜节拍,它在特定队列上多次发送不同的任务: app = Celery('tasks', broker=..., backend=...) app.conf.task_routes = ( [ ('tasks.beat', {'queue': 'print-queue'}), ], ) a
app = Celery('tasks', broker=..., backend=...)
app.conf.task_routes = (
[
('tasks.beat', {'queue': 'print-queue'}),
],
)
app.conf.beat_schedule = {
'beat-every-10-seconds': {
'task': 'tasks.beat',
'schedule': 10.0
},
}
@app.task(name='tasks.beat', bind=True)
def beat(self):
for i in range(10):
app.send_task("tasks.print", args=[i], queue="print-queue")
return None
在第二个consumer(main2.py)中,我实现了上述任务:
app = Celery('tasks', broker=..., backend=...)
app.conf.task_routes = (
[
('tasks.print', {'queue': 'print-queue'}),
],
)
@app.task(name='tasks.print', bind=True)
def print(self, name):
return name
当我启动两个芹菜工人时:
consumer1: celery worker -A main1 -Q print-queue --beat
consumer2: celery worker -A main2 -Q print-queue
我发现以下错误:
[ERROR/MainProcess] Received unregistered task of type 'tasks.print'
论第一消费者
[ERROR/MainProcess] Received unregistered task of type 'tasks.beat'
论第二消费者
是否可以在连接到同一代理的不同芹菜应用程序上拆分任务
提前谢谢 下面是正在发生的事情。你有两个工人
A
和B
,其中一个碰巧也在做芹菜生意(比如说一个是B
)
tasks.beat
的任务,因为A没有定义该任务
b。如果B读取消息,它将成功地尝试查找名为tasks.beat
(因为它确实有该任务)的任务,并将运行代码<代码>任务。beat将在兔子中为包含任务元数据的新消息排队。打印
任务。打印,但其中一个可能会收到消息
简而言之,队列中的所有工作人员(包括beat)都应该运行相同的代码。谢谢@mbattifarano,我完全理解你所说的。我使用两个不同的队列解决了这个问题,一个用于tasks.beat,另一个用于tasks.print。