zoukankan      html  css  js  c++  java
  • Celery

    什么是Celery

    本篇博客只是简单的介绍celery,关于celeey的执行机制和详情,推荐一篇博客.https://www.cnblogs.com/forward-wang/p/5970806.html

      Celery的功能

         Celery是基于python实现的第三方组件,可以实现定时任务,周期任务等.

      Celery的组成

      Celery的角色

      -任务,创建或发布任务.

      -使用redis/rabbitMQ进行任务记录(broker)和任务返回结果(backend)的缓存

      -worker,主动执行任务,主动返回结果.

    简单实例

    创建work.py文件

    from celery import Celery
    import time
    
    my_task = Celery(
           "task",
           broker = "redis://127.0.0.1:6379",
           bankend = "redis://127.0.0.1:6379:,       
    )
    @my_task
    def func1(x,y):
        time.sleep(15)
        retrun x+y
    from work import func1
    from celery.result import AsyncResult
    from work import my_task
    
    res = func1.delay(2,4)
    
    async_task = AsyncResult(
        app="my_task:,
        id=res.id,
    )
    if async_task.successful():
        result = async_task.get()
        print(result)
    else:
        print("等待任务完成")
    

      需要注意的  是:如果在windows平台使用celery需要下载eventlet

      work的启动不是直接python work.py,而是celery worker -A work -l INFO -P eventlet

    Celery的项目目录规范

      在celery中,项目中需要一个文件夹,文件夹的名字没有强制规范,但是其中必须要有一个配置worker的名叫celery的文件.

      celery.py实例

    from celery import Celery
    celery_task = Celery(
        "task",
        broker = "redis://127.0.0.1:6379",
        backend = "rendis://127.0.0.1:6379",
        include = ["Celery_task.task_one","Celery_task.task_two"]
    )   #Celery_task是定义的文件名
    

      celery.py的同级文件还有将要运行的脚本,与文件夹同级的还有一个调用文件,用来调用不同的任务.

      此时使用celery就通过Celery文件夹进行启动.

    celery worker -A Celery_task -l INFO -p eventlet -c 2
    

      celery默认启动五个线程,-c参数就是设置线程数的

    Celery的定时任务和周期任务

      celery的定时任务

    celery的定时任务是通过apply_async来实现的,apply_async接受两个参数,一个是任务需要的参数,另一个是任务的定时时间,这里的时间指的是utc时间.

    utc_time = datetime.datetime.utcfromtimestamp(time.time())
    add_time = datetime.timedelta(second=2)  # 定时的时间
    utc_time+=addtime
    res = task_one.apply_async(args=(1,2),eta=utc_time)
    

      celery的周期任务

    周期任务就是周期性的生产出任务交给worker去执行,增加celery.py的内容如下:

    from celery.schedules import crontab
    celery_task.conf.beat_schedule = {
        "ten_task":{
            "task":"Celery_task.task_one.one", #这是目录
            "schedule":crontab(hour=24)
            "args":(2,4),
        }
    }
    

      当我们使用celery实现周期任务时,不能直接创建workeer,需要先创建任务的beat工厂.

    celery beat -A Celery_task
    

      

  • 相关阅读:
    四则运算2实验及表格
    四则运算2初步构思
    2015.3.6的程序实践
    对《梦断代码》的阅读计划
    林锐——软件思想阅读笔记2
    二维数组最大子数组溢出问题
    循环数组求最大子数组
    电梯调度需求分析调研报告
    二维数组求最大子数组
    四则运算实现用户输入答案并统计正确数量
  • 原文地址:https://www.cnblogs.com/liuqingyang/p/10396835.html
Copyright © 2011-2022 走看看