首页 > 解决方案 > 如果使用 delay() 的任务调用何时会准确执行?

问题描述

我是 celery 的新手,我想使用它,但我不知道我什么时候调用一个任务,delay()什么时候会执行?添加新任务后,我必须对这项任务做些什么才能正常工作?我使用了一个现有的项目并对其进行了扩展,但是旧任务可以正常工作而我的任务不能。呈现 app1/task.py:

from __future__ import absolute_import, unicode_literals
import logging
logger = logging.getLogger('notification')


@shared_task
def send_message_to_users(users, client_type=None, **kwargs):
    .
    .
    #doing something here
    .
    .
    logger.info(
        'notification_log',
        exc_info=False,
        )
    )

这是我在 app2/task.py 中的代码:

@shared_task
def update_students_done_count(homework_id):
    homework_students = HomeworkStudent.objects.filter(homework_id=homework_id)
    students_done_count = 0
    for homework_student in homework_students:
        if homework_student.student_homework_status:
            students_done_count += 1
    homework = get_object_or_404(HomeWork, homework_id=homework_id)
    homework.students_done_count = students_done_count
    homework.save()

    logger.info(
        'update_students_done_count_log : with id {id}'.format(id=task_id),
        exc_info=False,
    )

两个任务如何调用的示例:

send_message_to_users.delay(users = SomeUserList)
update_students_done_count.delay(homework_id=SomeHomeWorkId)

项目/芹菜.py:

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'hamclassy.settings')

app = Celery('hamclassy')

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
#   should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()

项目/init.py:

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

在对任务进行任何更改后,我通过以下命令运行工作人员:

celery -A project worker -l info 

update_students_done_count.delay(homework_id=1)当我在端点中调用时,日志向我显示了这一点,recived task但我正在等待多少任务不执行。有什么想法吗?谢谢

标签: djangorabbitmqcelery-task

解决方案


推荐阅读