zoukankan      html  css  js  c++  java
  • win10下实现django+celery定时任务

    系统环境:win10
    python版本3.7
    django    # 我默认使用的最新版本 根据自己的需求
    celery==4.3.0
    django_celery==3.3.1
    django_celery_beat==2.1.0
    eventlet        # 根据需求使用版本 我用的是默认的最新版本

    #config.py-------配置broker,result-backend,序列化等相关
    #celery.py-------程序的入口文件
    #__init__.py------告诉python这是一个包
    #tasks.py----------任务文件

    celery.py内容

    from __future__ import absolute_import
    
    from celery import Celery
    #app是Celery类的实例,创建的时候添加了proj.tasks这个模块,也就是包含了proj/tasks.py这个文件
    app = Celery('proj',include=['proj.tasks'])
    
    #另一种配置方式,这里就大概写一下
    #app = Celery('任务名',broker='xxx',backend='xxx',include=['xxx','xxx'])
    
    #去找配置文件
    app.config_from_object('proj.config')

    config.py

    from __future__ import absolute_import
    #使用redis作为消息代理
    BROKER_URL = 'redis://127.0.0.1:6379/1'
    #把任务结果存放在redis2号库
    CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/2'
    
    ##以下内容可以不用配置,这些都是默认配置,除非自定义需要配置,我用 -- 框住
    # -------------------------------------------------
    #任务序列化和反序列化使用msgpack方案
    CELERY_TASK_SERIALIZER = 'msgpack'
    
    #读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
    CELERY_RESULT_SERIALIZER = 'json'
    
    #任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显
    CELERY_TASK_RESULT_EXPIRES = 60*60*24
    
    #指定接受的内容类型
    CELERY_ACCEPT_CONTENT = ['json','msgpack']
    
    # --------------------------------------------------
    
    
    #定时任务配置
    from datetime import timedelta
    CELERY_TIMEZONE = 'Asia/Shanghai'
    CELERY_ENABLE_UTC=True
    
    #ps:友情提示 CELERYBEAT_SCHEDULE 千万不要写错了,我之前写成 CELERY_BEAT_SCHEDULE导致定时任务执行不了,惨痛的教训!!!
    
    CELERYBEAT_SCHEDULE = {
        #这个名字(print_test)随便写,无所谓
        'print_test': {
            'task': 'proj.tasks.print_test',      #绑定的定时任务的函数
            'schedule': timedelta(seconds=2),      #设置定时时间,这里是2秒执行一次
             'args':()       #用来给函数传参
    
        }
    }

    tasks.py

    from __future__ import absolute_import
    
    from .celery import app
    
    
    @app.task
    def print_test():
        print("nict try")
        return 'hello'

    启动worker (# 执行celery 时要在proj的父目录,这里是apps)

    celery worker -A proj -l info -P eventlet

    启动定时任务的发送方: (# 执行celery 时要在proj的父目录,这里是apps)

    celery beat -A proj
    F:untitledapps>celery beat -A proj
    celery beat v4.3.0 (rhubarb) is starting.
    __    -    ... __   -        _
    LocalTime -> 2021-03-11 11:35:29
    Configuration ->
        . broker -> redis://127.0.0.1:6379/1
        . loader -> celery.loaders.app.AppLoader
        . scheduler -> celery.beat.PersistentScheduler
        . db -> celerybeat-schedule
        . logfile -> [stderr]@%WARNING
        . maxinterval -> 5.00 minutes (300s)

    F:untitledapps>celery worker -A proj -l info -P eventlet

    -------------- celery@DESKTOP-0PUEFP3 v4.3.0 (rhubarb)
    ---- **** -----
    --- * *** * -- Windows-10-10.0.18362-SP0 2021-03-11 11:47:00
    -- * - **** ---
    - ** ---------- [config]
    - ** ---------- .> app: proj:0x20d5bde9ec8
    - ** ---------- .> transport: redis://127.0.0.1:6379/1
    - ** ---------- .> results: redis://127.0.0.1:6379/2
    - *** --- * --- .> concurrency: 6 (eventlet)
    -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
    --- ***** -----
    -------------- [queues]
    .> celery exchange=celery(direct) key=celery


    [tasks]
    . proj.tasks.print_test

    [2021-03-11 11:47:00,338: INFO/MainProcess] Connected to redis://127.0.0.1:6379/1
    [2021-03-11 11:47:00,346: INFO/MainProcess] mingle: searching for neighbors
    [2021-03-11 11:47:01,363: INFO/MainProcess] mingle: all alone
    [2021-03-11 11:47:01,373: INFO/MainProcess] pidbox: Connected to redis://127.0.0.1:6379/1.
    [2021-03-11 11:47:01,374: INFO/MainProcess] celery@DESKTOP-0PUEFP3 ready.
    [2021-03-11 11:47:01,865: INFO/MainProcess] Received task: proj.tasks.print_test[4aece6e0-f5d6-4e91-9697-f9c8d5f77e51]
    [2021-03-11 11:47:01,866: WARNING/MainProcess] nict try
    [2021-03-11 11:47:01,867: INFO/MainProcess] Received task: proj.tasks.print_test[b90a7cd1-e272-417d-8152-374abe8a181b]
    [2021-03-11 11:47:01,868: WARNING/MainProcess] nict try
    [2021-03-11 11:47:01,868: INFO/MainProcess] Task proj.tasks.print_test[4aece6e0-f5d6-4e91-9697-f9c8d5f77e51] succeeded in 0.0s: 'hello'
    [2021-03-11 11:47:01,870: INFO/MainProcess] Task proj.tasks.print_test[b90a7cd1-e272-417d-8152-374abe8a181b] succeeded in 0.0s: 'hello'
    [2021-03-11 11:47:01,870: INFO/MainProcess] Received task: proj.tasks.print_test[681f2f69-a9ca-480c-91bd-9944c06bb067]
    [2021-03-11 11:47:01,870: WARNING/MainProcess] nict try
    [2021-03-11 11:47:01,871: INFO/MainProcess] Task proj.tasks.print_test[681f2f69-a9ca-480c-91bd-9944c06bb067] succeeded in 0.0s: 'hello'
    [2021-03-11 11:47:01,872: INFO/MainProcess] Received task: proj.tasks.print_test[621a3267-f2ba-466c-803d-c964cce33ab7]
    [2021-03-11 11:47:01,874: WARNING/MainProcess] nict try
    [2021-03-11 11:47:01,875: INFO/MainProcess] Task proj.tasks.print_test[621a3267-f2ba-466c-803d-c964cce33ab7] succeeded in 0.0s: 'hello'

    借鉴网站:https://www.cnblogs.com/bronyaa/p/14171681.html

     

     
  • 相关阅读:
    SCP 命令
    linux下IPTABLES配置详解
    Linux rpm 命令参数使用详解
    Linux(Centos7)yum安装最新redis
    YUM常用命令介绍
    Centos7下Yum安装PHP5.5,5.6,7.0
    腾讯云CentOS7.0使用yum安装mysql
    如何在CentOS 6.5上升级PHP
    第一个Python程序
    Python简介及环境部署
  • 原文地址:https://www.cnblogs.com/ZH-YC/p/14517003.html
Copyright © 2011-2022 走看看