我有一个运行cron脚本的django项目,执行管理命令。此命令为celery创建for循环任务:
for r in pr:
log_task(tasks_logger.info, "to_queue", r)
remind.delay(r, now, send_all)
任务看起来像这样:
class RTask(Task):
abstract = True
def on_failure(self, exc, task_id, args, kwargs, einfo):
r = args[0]
log_task(logger.error, exc, r)
log_task(logger_tb.error, einfo, r)
@task(base=RTask)
def remind(r, now, send_all):
log_task(logger.info, "from_queue", r)
....
正如您所见,我在任务执行之前有一个记录器,并且在其中的第一行。问题是 - 在更新项目代码(另一个程序员添加了其他任务和芹菜版本更新)之后,我的大部分任务开始消失。我的日志文件看起来像这样(执行8-10个任务中只有1个):
[2014-03-12 12:45:08,806] 106152122 INFO to_queue
[2014-03-12 12:45:08,819] 106138932 INFO to_queue
[2014-03-12 12:45:08,915] 106121944 INFO to_queue
[2014-03-12 12:45:08,916] 110418819 INFO from_queue
[2014-03-12 12:45:08,922] 106075777 INFO to_queue
芹菜日志文件不包含任何有用的信息。兔子也是如此。 它有很多这样的东西,但它与我的任务无关,还是它?
[2014-03-12 12:58:43,091: INFO/MainProcess] Got task from broker: celery.chord_unlock[7fe8f29f-69e1-456c-8a14-7fae0cfacc33] eta:[2014-03-12 12:58:44.089401+00:00]
[2014-03-12 12:58:43,092: INFO/MainProcess] Task celery.chord_unlock[7fe8f29f-69e1-456c-8a14-7fae0cfacc33] retry: Retry in 1s
[2014-03-12 12:58:43,092: INFO/MainProcess] Task celery.chord_unlock[7b1d4a6b-9a34-43e9-98c9-851c93ace5ce] retry: Retry in 1s
可能是什么问题? 如何跟踪任务以了解它什么时候消失?
请帮助=)
答案 0 :(得分:5)
您可能在后台运行芹菜进程,以前没有正确关闭的启动文件,可能会消耗这些邮件。试着通过运行
来看看你是否有这样的工人 ps aux | grep celery
在命令行中。以下命令将自动杀死所有这样的孤儿芹菜工人:
ps aux | grep celery | awk '{system("kill -9 " $2)}'
我在启动应用程序之前执行它
答案 1 :(得分:1)
这是我的问题的原因:
http://docs.python.org/2/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes
尽管日志记录是线程安全的,并且支持在单个进程中从多个线程记录到单个文件,但不支持从多个进程记录到单个文件,因为没有标准方法可以跨多个序列化对单个文件的访问Python中的进程。如果您需要从多个进程登录到单个文件,一种方法是让所有进程都记录到SocketHandler,并有一个单独的进程实现从套接字读取并记录到文件的套接字服务器。 (如果您愿意,可以在一个现有进程中专用一个线程来执行此功能。)本节更详细地介绍了这种方法,并包括一个工作套接字接收器,可以作为一个起点供您适应自己的申请
http://docs.python.org/2/howto/logging-cookbook.html#sending-and-receiving-logging-events-across-a-network
当负载很小时,一切都很完美,但随着它的增加我遇到了问题。