Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 芹菜任务消失了_Python_Django_Rabbitmq_Task_Celery - Fatal编程技术网

Python 芹菜任务消失了

Python 芹菜任务消失了,python,django,rabbitmq,task,celery,Python,Django,Rabbitmq,Task,Celery,我有一个django项目,使用cron脚本运行,执行一个管理命令。此命令将为芹菜的循环任务创建一个: 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, ein

我有一个django项目,使用cron脚本运行,执行一个管理命令。此命令将为芹菜的循环任务创建一个:

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: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
可能是什么问题? 如何跟踪任务以了解它何时消失


请帮助=)

您可能有芹菜进程在后台运行,这是以前未正确关闭的发布的遗迹,可能正在消耗这些消息。试着通过跑步来看看你是否有这样的工人

ps aux| grep芹菜

在命令行中。以下命令将自动为您杀死所有此类孤立芹菜工人:

ps aux | grep芹菜| awk'{system(“kill-9”$2)}'


我在启动我的应用程序之前执行了它

以下是我出现问题的原因:

尽管日志记录是线程安全的,并且支持从单个进程中的多个线程记录到单个文件,但不支持从多个进程记录到单个文件,因为Python中没有标准的方法可以跨多个进程序列化对单个文件的访问。如果需要从多个进程登录到单个文件,一种方法是让所有进程都登录到SocketHandler,并有一个单独的进程实现一个socket服务器,该服务器从socket读取数据并记录到文件。(如果愿意,您可以在现有进程中指定一个线程来执行此功能。)本节详细介绍了此方法,并包括一个工作套接字接收器,可作为您在自己的应用程序中进行调整的起点。


当负载很小时,一切都很好,但随着负载的增加,我遇到了问题。

您是否尝试将日志级别设置为DEBUG而不是INFO?>>您是否尝试将日志级别设置为DEBUG而不是INFO?没有其他信息=(如果没有详细信息,很难判断您的问题是什么。请首先尝试
rabbitmqctl list_queues
,或者如果您使用vhost:
rabbitmqctl list_queues-p
,并查看这些任务是否确实存储在RabbitMQ中。如果没有,请仔细检查配置文件。注意,如果您使用的是django_芹菜,则需要将其添加到设置中:
导入djcelery;djcelery.setup\u loader()
。顺便说一句:如果您有多个工作进程并且正在登录到同一个文件,您可能会遇到文件锁定问题,一些工作进程会覆盖其他工作进程的行。
[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