• celery 简单示例


    目录结构

     第一步  celery_task 里面的celery文件

    import time
    from celery import Celery
    # celery
    from celery.schedules import crontab
    
    # 将此文件celery启动   windows   celery worker -A celery_task --loglevel=info -P gevent
    # 将此文件celery启动   linux   celery worker -A celery_task --loglevel=info
    
    # 异步任务  Async Task
    # 定时任务  Celery Beat
    # 消息中间件 Broker
    # 任务执行单元  Celery Worker
    # 结果存储  Backend
    
    # 消息中间件 Broker
    broker = 'redis://192.168.10.10'
    # 结果存储  Backend
    backend = 'redis://192.168.10.10/0'
    
    app = Celery('my_task', broker=broker, backend=backend,
                 include=['celery_task.celery_task_one', 'celery_task.celery_task_two',
                          ])
    
    # 时区
    app.conf.timezone = 'Asia/Shanghai'
    # 是否使用UTC
    app.conf.enable_utc = False
    
    # 我要对beat任务生产做一个配置,这个配置的意思就是每10秒执行一次 celery_task.celery_task_one(10,10)
    
    app.conf.beat_schedule = {
        "each10s_task": {
            "task": "celery_task.celery_task_one.add",
            "schedule": 30,  # 每30秒钟执行一次    # 'schedule': timedelta(seconds=30),
            "args": (10, 10)
        },
        "each1m_task": {
            "task": "celery_task.celery_task_two.add_add",
            "schedule": crontab(minute='*/1'),  # 每一分钟执行一次
            "args": (10, 30)
        },
        "each24hours_task": {
            "task": "celery_task.celery_task_two.add",
            "schedule": crontab(),  # 每一分钟执行一次
            "args": (10, 100000)
        }
    }
    
    # 任务结果过期设置 `result_expires=3600' 。默认设置是1天,
    app.conf.update(
        result_expires=3600,
    )
    
    # 以上配置完成之后,还有一点非常重要
    # 不能直接创建Worker了,因为我们要执行周期任务,所以首先要先有一个任务的生产方
    # celery beat -A celery_task
    # celery worker -A celery_task -l INFO -P eventlet

    第二步 do_task

    from celery_task.celery_task_one import add as add1
    from celery_task.celery_task_two import add as add2
    from celery_task.celery import app
    
    from celery.schedules import crontab
    
    # 将任务交给Celery的Worker执行
    res = add1.delay(1, 3)
    
    print(res.id)
    
    res = add2.delay(1, 3)
    
    print(res.id)
    
    
    """
    Celery4
    新版的好处是,可以把定时任务和普通的任务一样单独定义了。多了 @app.on_after_configure.connect 这个装饰器,3版本是没有这个装饰器的。
    写代码
    单独再创建一个py文件,存放定时任务:
    
    链接:https://www.jianshu.com/p/c622f5f5d015
    """

    第三步 将所有任务 写在celery_task 下面  'celery_task.celery_task_one', 'celery_task.celery_task_two' 进行调取执行

    'celery_task.celery_task_one'

    from
    .celery import app import time @app.task def add(x, y): time.sleep(5) return x + y
    'celery_task.celery_task_two' 
    from
    .celery import app import time @app.task def add(x, y): time.sleep(5) return x * y @app.task def add_add(x, y): time.sleep(5) return x * y

       # 在 celery_task 目录下执行  是用来生产定时任务(app.conf.beat_schedule配置的)

    # celery beat -A celery_task

    -------------------------------------------------------------


    # 在
    celery_task 目录下执行,这个的目的是启动 worker , worker是用来执行,生产的任务
    # celery worker -A celery_task -l INFO -P eventlet
    # 将此文件celery启动   windows   celery worker -A celery_task --loglevel=info -P gevent
    # 将此文件celery启动   linux   celery worker -A celery_task --loglevel=info
     
    # 在  celery_task  目录下执行
  • 相关阅读:
    jquery实现选项卡(两句即可实现)
    常用特效积累
    jquery学习笔记
    idong常用js总结
    织梦添加幻灯片的方法
    LeetCode "Copy List with Random Pointer"
    LeetCode "Remove Nth Node From End of List"
    LeetCode "Sqrt(x)"
    LeetCode "Construct Binary Tree from Inorder and Postorder Traversal"
    LeetCode "Construct Binary Tree from Preorder and Inorder Traversal"
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/13809521.html
Copyright © 2020-2023  润新知