请帮助我,以了解我做错了什么。芹菜不能执行我的任务。
Settings.py
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = TIME_ZONE
proj / celery.py
from __future__ import absolute_import
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
初始化 .py
from __future__ import absolute_import, unicode_literals
from celery import app as celery_app
__all__ = ['celery_app']
代码
@shared_task
def generate(instance, sender, **kwargs):
for i in CK_PROGRAM_NAME:
program_kf = i[0]
ck = instance.dk*program_kf
program_name = i[1]
program_obj = Program.objects.get(name=program_name)
foodprogram_generator(instance, ck, program_kf, program_obj, sender, **kwargs)
return
@receiver(post_save, sender=LeadUser)
def leaduser_foodprogram_post_save(instance, sender, **kwargs):
generate.delay(instance, sender, **kwargs)
return
Worker由以下人员运行:celery-项目工作者--loglevel = INFO
逻辑是: 创建client_object之后,post_save信号会启动leaduser_foodprogram_post_save,这会添加到队列generate()
我可以看到结果,所以我认为它没有运行。 没有芹菜,一切正常。
感谢您的回答!
答案 0 :(得分:0)
以下几点: *具有名称空间的config_from_object可能会将其从变量中删除,因此您可能无法获得所需的配置, *当您看到共享任务时,您需要确保从配置的celery应用程序中调用该任务,因为使用共享任务的主要目的是实际在不同应用程序之间共享任务。看看celery应用程序对象上的“ set_default”函数,只需在celery设置上调用它,您应该会看到区别。 无论如何,最好的检查方法是将rdb放入其中,并检查celery应用程序,检查配置,如果未设置代理,则我先前评论中解释的第二点应该可以帮助您
答案 1 :(得分:0)
感谢大家的回答,没有具体问题,但是我重新检查了所有内容,并根据this article运行了任务: