• python项目_使用异步功能,celery


    1.安装celery

    pip install -U celery -i https://pypi.douban.com/simple    ##-U是指update的意思

    #一定要确保一件事,redis启动了, 因为是使用redis为容器,里面有生产者和消费者

    2.创建mycelery目录

    luffyapi/
    ├── mycelery/
        ├── config.py     # 配置文件
        ├── __init__.py   
        ├── main.py       # 主程序
        └── sms/          # 一个目录可以放置多个任务,该目录下存放当前任务执行时需要的模块或依赖
            └── tasks.py  # 任务的文件,名称必须是这个!!!

    3.main.py代码编写如下

    
    
    # 主程序
    from celery import Celery
    # 创建celery实例对象
    app = Celery("luffy")

    # 如果想要在celery中执行django的代码,例如模型操作,日志记录,则必须在当前celery中对django进行初始化
    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'luffyapi.settings.dev')
    import django
    django.setup() #




    # 通过app对象加载配置
    app.config_from_object("mycelery.config")

    # 自动搜索并加载任务
    # 参数必须必须是一个列表,里面的每一个任务都是任务的路径名称
    # app.autodiscover_tasks(["任务1","任务2"])
    app.autodiscover_tasks(["mycelery.sms"])

    # 启动Celery的命令
    # 强烈建议切换目录到项目的根目录下启动celery!!
    # celery -A mycelery.main worker --loglevel=info
    
    

    # 启动Celery的命令
    # 切换目录到mycelery根目录下启动
    # celery -A mycelery.main worker --loglevel=info

    如果是在window环境下运行项目,启动celery, 那么请安装

    pip3 install eventlet

    然后启动命令为celery -A mycelery.main worker --loglevel=info -P eventlet

     

    4.配置文件config.py代码编写如下

    # 任务队列的链接地址
    broker_url = 'redis://127.0.0.1:6379/15'
    # 结果队列的链接地址
    result_backend = 'redis://127.0.0.1:6379/14'

    5.创建一个任务文件sms/tasks.py,并创建任务,代码:

    # celery的任务必须写在tasks.py的文件中,别的文件名称不识别!!!
    from mycelery.main import app
    
    @app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
    def send_sms():
        print("发送短信!!!")
    
    @app.task  # name表示设置任务的名称,如果不填写,则默认使用函数名做为任务名
    def send_sms2():
        print("发送短信任务2!!!")

    6.最终来调用异步任务

    # 1. 声明一个和celery一模一样的任务函数,但是我们可以导包来解决
    from mycelery.sms.tasks import send_sms
    
    # 2. 调用任务函数,发布任务
    send_sms.delay(mobile,sms_code)
    # send_sms.delay() 如果调用的任务函数没有参数,则不需要填写任何内容

     7.启动定时任务(在config.py文件里面添加)

    # 定时任务的调度器
    from celery.schedules import crontab
    from .main import app
    # 定时任务的调度列表,用于注册定时任务
    app.conf.beat_schedule = {
        # Executes every Monday morning at 7:30 a.m.
        'check_order_outtime': {
            # 本次调度的任务
            'task': 'check_order', # 这里的任务名称必须先到main.py中注册
            # 定时任务的调度周期
            # 'schedule': crontab(minute=0, hour=0),   # 每周凌晨00:00
            'schedule': crontab(),   # 每分钟
              # 'args': (16, 16),  # 注意:任务就是一个函数,所以如果有参数则需要传递
        },
    }

    8.增加定时任务要执行的函数(写在sms/tasks.py文件里面)

    from mycelery.main import app
    @app.task(name="check_order")
    def checkout_order_outtime():
        print("hello")

    9.启动问题

    celery -A mycelery.main beat   #启动定时任务
    celery -A mycelery.main worker --loglevel=info  #然后开新终端,启动异步任务

    #命令的中的mycelery是个python文件夹,mycelery.main 其实就是路径,以后启动可根据自己的路径进行修改
  • 相关阅读:
    xpath解析以及lxml解析库
    python sort()和sorted()的不同
    爬取电影天堂-二级页面抓取
    爬取猫眼电影榜单TOP100榜-以mysql数据库保存
    爬取猫眼电影榜单TOP100榜-以csv文件保存
    爬取猫眼电影榜单TOP100榜-以命令行输出
    爬虫 贪婪匹配以及非贪婪匹配
    爬取百度贴吧
    python 面试
    python 从array保存伪色彩图片 —— 发现的坑
  • 原文地址:https://www.cnblogs.com/jalen-123/p/13168750.html
Copyright © 2020-2023  润新知