Django Celery计划任务

问题描述

我正在学习Django celery,并且尝试使用Django celery运行计划的任务。为此,我编写了一个创建以下多个用户的任务:

@shared_task
def create_random_user(total):
    for i in range(total):
        username = 'user_{}'.format(get_random_string(10,string.ascii_letters))
        email = '{}@example.com'.format(username)
        password = get_random_string(50)
        User.objects.create_user(username=username,email=email,password=password)
    return '{} random users created with success!'.format(total)

,当我点击以下django视图的页面时,任务正在运行:

def create(request):
     create_random_user.delay(10)
     return render(request,'test.html')

以上所有方法都运行良好,但我不喜欢这种方式来访问页面并创建用户

我希望它每12小时创建多个用户,并每15小时删除所有用户

我不知道该怎么办。

有人可以帮我吗?

注意:我的celery设置运行良好,但是我没有获得与celery一起执行计划任务的过程。

在这种情况下,有人可以帮助我吗?

解决方法

您需要使用 Celery beat 安排任务。确保先阅读它。但是只是为了给您一个概览,您必须使用

myapp / tasks.py

from celery.decorators import periodic_task
from celery.task.schedules import crontab

@periodic_task(run_every=(crontab(minute='*/10')),name="my_periodic_task",ignore_result=True)
def my_periodic_func():
    pass

尽管您可以通过许多其他方式来安排时间表。只是让您的手变脏就足够了。

以下是一些参考资料: https://docs.celeryproject.org/en/stable/userguide/periodic-tasks.html

为此,我还建议使用自定义调度程序类。它将帮助您从Django管理员本身安排任务。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...