我已经调用了一个任务,使用urllib2远程获取一些信息,这个任务已经被执行了几千次。任务的eta(在一周内)是随机安排的,所以它们不会同时访问服务器。有时我会得到404错误,有时则不会。如果出现错误,我会进行错误处理。
在RabbitMQ控制台中,我可以看到16条未确认的消息:
我停止了celery,清空了队列并重新启动了celery,但是这16条未确认的消息仍然存在。
我有其他的任务要访问同样的队列,但它们都没有被执行。在清空之后,我尝试提交另一个任务,但它的状态仍然是ready:
有什么办法可以找出为何消息保持为未确认状态?
版本:
在RabbitMQ控制台中,我可以看到16条未确认的消息:
![16 unacknowledged messages](https://istack.dev59.com/i8zF0.webp)
我有其他的任务要访问同样的队列,但它们都没有被执行。在清空之后,我尝试提交另一个任务,但它的状态仍然是ready:
![enter image description here](https://istack.dev59.com/OplST.webp)
celery==3.1.4
{rabbit,"RabbitMQ","3.5.3"}
celeryapp.py
CELERYBEAT_SCHEDULE = {
'social_grabber': {
'task': '<django app>.tasks.task_social_grabber',
'schedule': crontab(hour=5, minute=0, day_of_week='sunday'),
},
}
tasks.py
@app.task
def task_social_grabber():
for user in users:
eta = randint(0, 60 * 60 * 24 * 7) #week in seconds
task_social_grabber_single.apply_async((user), countdown=eta)
这个任务没有定义路由,所以它会进入默认队列:celery。目前有一个工作者正在处理这个队列。
supervisord.conf:
[program:celery]
autostart = true
autorestart = true
command = celery worker -A <django app>.celeryapp:app --concurrency=3 -l INFO -n celery