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