组团学

flask扩展 flask-celery

阅读 (179004)

一、flask-celery安装

pip install celery

pip install redis==2.10.6

pip install flask-celery-helper

二、创建和加载

  • 工程目录下创建run_celery.py文件

    #定义创建celery对象的方法 from celery import Celery def make_celery(app): celery = Celery( app.import_name, backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL'] ) celery.conf.update(app.config) TaskBase = celery.Task class ContextTask(celery.Task): abstract = True def __call__(self, *args, **kwargs): with app.app_context(): return TaskBase.__call__(self, *args, **kwargs) celery.Task = ContextTask return celery
  • manage.py

    from flask_script import Manager from flask_migrate import Migrate, MigrateCommand from app import create_app from exts import db from run_celery import make_celery # 将要生成表的模型类导入 from myApp.models import * app = create_app(__name__) celery = make_celery(app) #创建迁移管理对象 migrate = Migrate(app, db) manager = Manager(app) manager.add_command("db", MigrateCommand) if __name__ == '__main__': manager.run()
  • exts/ext_celery

    from flask_celery import Celery celery = Celery() from .ext_celery import celery
  • 关联manage.py中的celery与ext_celery中的cel

    app.py

    from exts import celery celery.init_app(app)

三、配置

# celery CELERY_RESULT_BACKEND = "redis://:@127.0.0.1:6379/5" CELERY_BROKER_URL = "redis://:@127.0.0.1:6379/6" # celery的工人一直启动可能会造成内存泄露,该参数规定每个工人执行了多少个任务后就会被杀死 # CELERY_MAX_TASKS_PER_CHILD = 50

四、封装任务

在应用目录下创建名为tasks的包目录

# from manage import celery from exts import celery @celery.task() def mail(): print("----开始耗时操作----") import time time.sleep(5) print("----结束耗时操作----")

五、添加到队列

from myApp.tasks import mail @myApp.route("/sendMail/") def sendMail(): #将耗时任务添加到队列 mail.delay() return "邮件发送成功"

六、启动flask服务

python manage.py runserver -d -r

七、启动工人

celery worker -A manage.celery --loglevel=info
需要 登录 才可以提问哦