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 #定时任务的消费者 执行方法

  • 相关阅读:
    pymysql模块的简单操作
    day21--继承--派生
    subprocess模式,re模式,logging模块, 防止测试自动执行, 包的理论
    前端知识
    Django框架
    jieba/word cloud
    python语法基础知识
    Vue框架——Vue指令
    Vue框架基础
    Django——静态文件配置和连接数据库
  • 原文地址:https://www.cnblogs.com/zaizai1573/p/10927608.html
Copyright © 2011-2022 走看看