【发布时间】:2018-05-04 19:41:35
【问题描述】:
场景:
我在 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>
删除工人命令: ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
问题:
由于我已经从 RabbitMQ 服务器中删除了所有队列,现在应该只接收新任务。但是我仍然收到旧任务,而且列表上没有出现新任务。造成这种情况的真正原因是什么?
【问题讨论】:
标签: python rabbitmq celery django-celery