Maison  >  Article  >  développement back-end  >  Introduction à deux méthodes d'utilisation des tâches planifiées dans Django

Introduction à deux méthodes d'utilisation des tâches planifiées dans Django

不言
不言original
2018-09-26 17:53:232981parcourir

Cet article vous présente deux méthodes d'utilisation des tâches planifiées dans Django. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Aujourd'hui, nous présentons deux façons d'utiliser les tâches planifiées dans Django.

Méthode 1 : APScheduler
1) Installation :

pip install apscheduler

2) Utilisation :

from apscheduler.scheduler import Scheduler
from django.core.cache import cache
# 实例化
sched = Scheduler()    

# 每30秒执行一次
@sched.interval_schedule(seconds=30)
def sched_test():
    """
    测试-定时将随机数保存到redis中
    :return:
    """
    seed = "123456789"
    sa = []
    for i in range(4):
        sa.append(random.choice(seed))
    code = ''.join(sa)
    cache.set("test_"+code, code)

3) Démarrer la tâche planifiée

# 启动定时任务
sched.start()

Méthode 2 : django-crontab
1) Installation :

pip install django-crontab

2) Ajouter la configuration à INSTALL_APPS
INSTALLED_APPS = (

'django_crontab',

)
3) Ecrire des fonctions temporisées :

在django的app中新建一个test_crontab.py文件,把需要定时执行的代码放进去
    import random

    from django.core.cache import cache

    def test():
        """
        测试-定时将随机数保存到redis中
        :return:
        """
        seed = "123456789"
        sa = []
        for i in range(4):
            sa.append(random.choice(seed))
        code = ''.join(sa)
        cache.set("test_"+code, code)

4) Ecrire des commandes temporisées
Django remplace les modules Python dont les noms ne commencent pas par un trait de soulignement dans le répertoire gestion/commands de chaque application du projet . Une commande manage.py est enregistrée et une commande personnalisée est la suivante : Vous devez définir une classe Command qui hérite de BaseCommand et implémenter la méthode handle.
Écrivez le fichier appname/management/commands/test.py

import random

from django.core.management.base import BaseCommand
from django.core.cache import cache

class Command(BaseCommand):
    """
    自定义命令
    """
    def handle(self, *args, **options):
        """
        自定义命令
        :return:
        """
        seed = "123456789"
        sa = []
        for i in range(4):
            sa.append(random.choice(seed))
        code = ''.join(sa)
        cache.set("test_"+code, code)

Une fois la définition terminée, exécutez le test python manage.py, la fonction handle() sera exécutée

5) Dans les paramètres, ajoutez la configuration dans .py

# 运行定时函数
CRONJOBS = [
    ('*/1 * * * *', 'appname.test_crontab.test','>>/home/python/test_crontab.log')
]

# 运行定时命令
CRONJOBS = [
    ('*/1 * * * *', 'django.core.management.call_command', ['test'], {}, '>> /home/python/test.log'),
]

Il y a trois paramètres principaux ci-dessus, qui représentent : le temps d'exécution des tâches planifiées (intervalle), les tâches planifiées à exécuter et l'ajout d'informations sur les tâches planifiées au file
Pour les étudiants qui sont familiers avec la tâche planifiée crontab sous Linux, ils connaissent peut-être la syntaxe du premier paramètre ci-dessus. Ce qui précède indique que le code sera exécuté toutes les minutes.

La syntaxe de crontab pour les tâches planifiées sous Linux est la suivante :

*  *  *  *  * command
分钟(0-59) 小时(0-23) 每个月的哪一天(1-31) 月份(1-12) 周几(0-6) shell脚本或者命令

Exemple :

0 6 * * * commands >> /tmp/test.log # 每天早上6点执行, 并将信息追加到test.log中
0 */2 * * * commands # 每隔2小时执行一次

Les amis intéressés peuvent se plonger dans les tâches planifiées crontab de Linux .

6) Ajouter et démarrer des tâches planifiées

python manage.py crontab add

Autres commandes :

python manage.py crontab show: 显示当前的定时任务
python manage.py crontab remove: 删除所有定时任务

C'est tout pour les tâches planifiées d'aujourd'hui S'il y a des erreurs, n'hésitez pas. pour les partager Correction!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn