gpt4 book ai didi

python - celery worker 接收任务,即使我在 RabbitMQ 队列上没有消息

转载 作者:行者123 更新时间:2023-12-05 04:08:30 25 4
gpt4 key购买 nike

场景:

出于测试目的,我在 celery 上创建了一个 shared_task [RabbitMQ 作为消息队列的代理]:

@app.task(bind=True, max_retries = 5, base=MyTask)
def testing(self):
try:
raise smtplib.SMTPException

except smtplib.SMTPException as exc:
print 'This is it'
self.retry(exc=exc, countdown=2)


#Overriding base class of Task
class MyTask(celery.Task):
def on_failure(self, exc, task_id, args, kwargs, einfo):
print "MyTask on failure world"
pass

我在创建一个worker后通过输入命令testing.delay() 10次来调用测试任务。我只是通过按 Ctrl+C 退出服务器并从 RabbitMQ 服务器中删除所有这些队列。我再次启动服务器。

服务器启动命令: celery worker --app=my_app.settings -l DEBUG

队列删除命令: rabbitmqadmin delete queue name=<queue_name>

删除 worker 命令: ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

问题:

因为我已经从 RabbitMQ 服务器中删除了所有队列,所以现在应该只接收新任务。但是我仍然得到旧任务,而且列表中没有出现新任务。造成这种情况的真正原因是什么?

最佳答案

发生的事情是你的工作人员接受了不止一项任务,除非你在启动工作人员时有 -Ofair 标志

https://medium.com/@taylorhughes/three-quick-tips-from-two-years-with-celery-c05ff9d7f9eb

因此,即使您清除了您的队列,您的工作进程仍将继续运行其已经拾取的任务,除非您终止工作进程本身。

编辑添加

如果重启后有任务在运行,需要撤销任务。

http://celery.readthedocs.io/en/latest/faq.html#can-i-cancel-the-execution-of-a-task

关于python - celery worker 接收任务,即使我在 RabbitMQ 队列上没有消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com