我使用Django-Celery + rabbitmq来执行一些asyn任务,我定义了一个队列'sendmail'来执行发送电子邮件任务,发送邮件是由特定任务触发的(这个任务有自己的队列),但现在我遇到了问题,具体任务完成后,邮件有时会立即发送,有时需要5-20分钟。我想知道是什么原因引起的。
当调用task.delay()时,Django-celery会将taskname和param作为消息打包给rabbitmq。
我想知道什么时候消息转到rabbitmq,但是使用web管理工具只能查看总消息,看不到每条消息的详细信息,特别是消息到达的时间。 Django-celery日志只能看到从代理时间得到的工作并执行任务时间。我想知道所有相关的时间点,以确定主要消耗的时间。
答案 0 :(得分:1)
Django-Celery确实(我相信)基于每个任务报告任务数据。当您同步数据库时,它会创建一堆可通过管理员访问的监控表。但是,为了将这些任务记录在这些表中,您需要在django上下文中运行celerycam程序(python ./manage.py celerycam)。 celerycam程序将每隔一秒(默认情况下)对您的任务进行“快照”并记录有关它们的信息。监视的另一个有用工具是celerymon程序(它也必须在django上下文中运行)。这是一个命令行ncurses程序,可以在发生任务时报告有关任务的实时信息。最后,rabbitmqctrl有一堆可能有助于监控的选项。
这是文档中特别有用的页面: http://celery.github.com/celery/userguide/monitoring.html
无论如何,这是我在使用芹菜时用来监控我的任务的。