您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – Celery任务被发送到多个队列

5b51 2022/1/14 8:23:01 python 字数 2112 阅读 471 来源 www.jb51.cc/python

我注意到芹菜已经将任务发送到多个队列,两个队列中的工作人员一直在执行任务. 我的队列定义是: CELERY_QUEUES = ( Queue('default', Exchange('default'), routing_key='default'), Queue('client1', Exchange('client1'), routing_key='client1'),

概述

我的队列定义是:

CELERY_QUEUES = (
    Queue('default',Exchange('default'),routing_key='default'),Queue('client1',Exchange('client1'),routing_key='client1'),Queue('images',Exchange('media'),routing_key='media.images'),)

在停止所有工人之后,我跑了:

>>> tasks.ping.apply_async(queue='default')

我可以看到任务出现在default和client1队列中:

$redis-cli -c llen default
(integer) 1
$redis-cli -c llen client1
(integer) 1

这仅适用于认队列.直接将它发送到client1队列只会将其添加到那里:

>>> tasks.ping.apply_async(queue='client1')
$redis-cli -c llen default
(integer) 1
$redis-cli -c llen client1
(integer) 2

图像队列永远不会错误地接收任务.

这是Celery 3.1.15与Redis经纪人.

最初我配置了队列:

CELERY_QUEUES = (
    Queue('default',)

后来改为将它们用于client1的单独交换和路由密钥.

但由于某种原因,Kombu没有清除旧的绑定,所以我留下:

redis> smembers _kombu.binding.default
1) "default\x06\x16\x06\x16client1"
2) "default.client1\x06\x16\x06\x16client1"
3) "default\x06\x16\x06\x16default"

因此,发送到认值的任务将被路由到default和client1队列.

解决方法删除不正确的绑定:

redis> srem _kombu.binding.default "default\x06\x16\x06\x16client1"
redis> srem _kombu.binding.default "default.client1\x06\x16\x06\x16client1"

总结

以上是编程之家为你收集整理的python – Celery任务被发送到多个队列全部内容,希望文章能够帮你解决python – Celery任务被发送到多个队列所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶