django - 如果使用 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
但我正在等待多少任务不执行。有什么想法吗?谢谢
解决方案
推荐阅读
- laravel - Laravel 5.4 - Access Static Method inside Controller Method
- javascript - 如何在 HTML 中打印 javascript 函数结果
- excel - 如何让 Autohotkey 写入元数据,然后提取该元数据以用于重命名文件
- reporting-services - 在 SSRS 报告中显示表格中的数据
- python - 在定义函数的文件中修补函数
- azure-functions - Azure Function App CosmosDbTrigger Gives Null Parameter Error
- amazon-web-services - 使用 CloudFormation 有条件地定义 Elastic Beanstalk 环境变量
- database - 为用户构建隐私设置
- django - 将类实例传递给 Django 中的会话
- php - 如何使用 PHP 找出我的服务器的请求 IP