最近我注意到一种奇怪的芹菜(3.1.25)行为。一个任务排队等待仅使用send_task()
执行一次,但是过了一段时间我看到多个运行相同的任务!我花了几个小时查看Celery文档,试图找出如何防止这种行为。任何帮助将不胜感激!
以下是inspect active
:
...
-> celery1@ec2-256-234-55-209.compute-1.amazonaws.com: OK
* {'hostname': 'celery1@ec2-256-234-55-209.compute-1.amazonaws.com', 'id': '5bf971b7-c2d2-47a1-9e3e-abec6c3c7ab4', 'args': "['myex', 'equities', 20170103]", 'time_start': 1633747.663716712, 'name': 'parsing.2pass', 'acknowledged': False, 'delivery_info': {'exchange': 'celery', 'priority': 0, 'redelivered': None, 'routing_key': 'celery'}, 'worker_pid': 28649, 'kwargs': '{}'}
* {'hostname': 'celery1@ec2-256-234-55-209.compute-1.amazonaws.com', 'id': '5bf971b7-c2d2-47a1-9e3e-abec6c3c7ab4', 'args': "['myex', 'equities', 20170103]", 'time_start': 1637348.143546186, 'name': 'parsing.2pass', 'acknowledged': False, 'delivery_info': {'exchange': 'celery', 'priority': 0, 'redelivered': None, 'routing_key': 'celery'}, 'worker_pid': 1550, 'kwargs': '{}'}
-> celery1@ec2-54-234-55-254.compute-1.amazonaws.com: OK
* {'hostname': 'celery1@ec2-256-234-55-254.compute-1.amazonaws.com', 'id': '5bf971b7-c2d2-47a1-9e3e-abec6c3c7ab4', 'args': "['myex', 'equities', 20170103]", 'time_start': 1626395.204211438, 'name': 'parsing.2pass', 'acknowledged': False, 'delivery_info': {'exchange': 'celery', 'priority': 0, 'redelivered': None, 'routing_key': 'celery'}, 'worker_pid': 26978, 'kwargs': '{}'}
-> celery1@ec2-54-226-20-88.compute-1.amazonaws.com: OK
* {'hostname': 'celery1@ec2-256-226-20-88.compute-1.amazonaws.com', 'id': '5bf971b7-c2d2-47a1-9e3e-abec6c3c7ab4', 'args': "['myex', 'equities', 20170103]", 'time_start': 1630146.08942695, 'name': 'parsing.2pass', 'acknowledged': False, 'delivery_info': {'exchange': 'celery', 'priority': 0, 'redelivered': None, 'routing_key': 'celery'}, 'worker_pid': 19473, 'kwargs': '{}'}
...
请注意,任务5bf971b7-c2d2-47a1-9e3e-abec6c3c7ab4
正在至少3个工作程序上运行,即使它是由单个 send_task()调用触发的。我们使用Redis作为所有默认值的经纪人(没有花哨的交易所和路线)。
答案 0 :(得分:1)
这种行为可能有几种可能的原因。
无论如何,您可以使用celery_once来阻止这一点。主要思想是在任务中检查它是否已被提升和执行。是的,这看起来像是一种解决方法,但它的效果非常好。