zoukankan      html  css  js  c++  java
  • python celery

    celery 一般用于做异步 和定时任务

    不过听网上说 celery 坑还是蛮多的,特别定时任务,我们一般用来做定时任务,还有数据导入导出。
    celery 不支持 redis cluster 集群模式
    uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任务( 2min 以内可以)

    异步可以用redis 定时任务 能用的 就很多了
    celery 一般用于做异步 和定时任务

    不过听网上说 celery 坑还是蛮多的,特别定时任务,我们一般用来做定时任务,还有数据导入导出。
    celery 不支持 redis cluster 集群模式
    uWSGI 自带了一个简单的 Spooler 可以处理大部分异步任务和周期运行的任务( 2min 以内可以)

    异步可以用redis 定时任务 能用的 就很多了

    延时

    s1.py

    #消费着
    from celery import Celery
    import time
                                 #放东西的地方                          #返回值
    c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1")
    
    @c.task
    def myfun1(a,b):
        return f"myfun1{a}{b}"

    celery worker -A s1 -l info -P eventlet #异步和延时执行方法

    s2.py

    from s1 import  myfun1,c
    from celery.result import AsyncResult
    from datetime import timedelta
    #指定多长时间以后执行
    # s=myfun1.apply_async((10,20),countdown=5)
    #第二种 知道就行
    s=myfun1.apply_async((10,20),eta="utc")
    print(s.id)
    #还有延时 重试等党发

    异步

    s1.py

    #消费着
    from celery import Celery
    import time
                                 #放东西的地方                          #返回值
    c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1")
    
    @c.task
    def myfun1(a,b):
        # int("阿达")
        return f"myfun1{a}{b}"
    
    @c.task
    def myfun2():
        return "myfun2"
    
    @c.task
    def myfun3():
        return "myfun3"

    s2.py

    #生产者
    from s1 import myfun1,myfun2,myfun3,c
    from  celery.result import AsyncResult
    s=myfun1.delay(10,20)#生产
    # print(s.id)#拿id
    # print(s.status)#等待返回PENDING
    r=AsyncResult(id=s.id,app=c)
    # print(r.successful())#False
    print(r.get())#拿到返回值
    print(r.get(propagate=False))#只获取报错信息
    print(r.traceback)#获取具体出错位置
    # print(r.status)#SUCCESS
    # print(r.successful())#True

    周期

    s1.py

    #消费着
    from celery import Celery
    import time
                                 #放东西的地方                          #返回值
    c=Celery("task",broker="redis://192.168.12.191:6379/2",backend="redis://192.168.12.191:6379/1")
    
    @c.task
    def myfun1(a,b):
        # int("阿达")
        return f"myfun1{a}{b}"
    
    @c.task
    def myfun2():
        return "myfun2"
    
    @c.task
    def myfun3():
        return "myfun3"

    s2.py

    from s1 import c
    from celery.beat import crontab
    c.conf.beat_schedule = {
        # "name": {
        #     "task": "s1.myfun1",#执行谁的
        #     "schedule": 3,#间隔时间
        #     "args": (10, 20)#传的参数
        # },#第二种方式
        "crontab": {
            "task": "s1.myfun1",
            "schedule": crontab(minute=53),#指定到多少秒执行
            "args": (10, 20)
        }
    }

     celery beat -A s2 -l info #定时任务的消费者 执行方法

  • 相关阅读:
    C#总结(四)调用C++动态库
    Golang 入门系列(十二)ORM框架gorm
    《关键对话》如何高效沟通,营造无往不利的事业和人生?
    Golang 入门系列(十一)Go语言实现webapi
    Golang 入门系列(十) mysql数据库的使用
    Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件
    Golang 入门系列(八) cron定时任务
    Golang 入门系列(七) Redis的使用
    福利 | 互联网产品经理学习资料免费下载(可下载)
    福利 | 2018各大技术大会资料汇总(可下载)
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10927608.html
Copyright © 2011-2022 走看看