Celery和Flask的结合(在Blueprint控制下的部署)

来源:互联网 发布:软件怎么开发视频教程 编辑:程序博客网 时间:2024/06/18 04:39

方便他人,也为了记录知识

备注:前提是已经按照好了celery,为什么不用RabbitMQ呢?
因为我用的是linux,发现RabbitMQ并不是python语言编写的,安装十分麻烦(个人感觉)
#接下来是正文#
首先是项目的目录预览(只列出来了相关的模块)
Proj/
    app/
        extensions.py
        __init__.py
        tasks.py
    config.py
    manage.py
    celert_runner.py

extensions.py

from flask.ext.celery import Celerycelery=Celery()

__init__.py

# -*- coding:utf-8 -*-from flask import Flaskfrom config import configfrom flask_sqlalchemy import SQLAlchemyfrom datetime import timedelta###从自己写的extensions.py导入celeryfrom .extensions import celerydb = SQLAlchemy()def create_app(config_name):    app = Flask(__name__)    app.config.from_object(config[config_name])    config[config_name].init_app(app)####初始化celery把与Flask创建的app相关联    celery.init_app(app)    db.init_app(app)    return app

tasks.py

###执行的任务文件from app.extensions import celeryfrom app.store.models import Channel from app import db@celery.task()def log(msg)    result=Channel.query.all()    return result

config.py

###项目的配置文件from datetime import timedeltaclass Config(object):    ###自己的内容###关键!配置celeryclass LastConfig(Config):    DEBUG = True    ###配置celery    CELERY_BROKER_URL = 'redis://localhost:6379/0'    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@localhost:3306/dream_db" ###这个是定时任务,可有可无    CELERYBEAT_SCHEDULE = {        'log-3s':{            'task':'app.tasks.log',            "schedule": timedelta(seconds=3),             "args":('TestMessage',)        }    }class TestConfig(Config):    DEBUG = True    SQLALCHEMY_ECHO = True    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@localhost:3306/test_data"config = {'default':LastConfig, 'test':TestConfig}

celery_runner.py

import osfrom app import create_appfrom celery import Celery from app.tasks import logfrom config import configdef make_celery(app):    celery = Celery(        app.import_name,        broker=app.config['CELERY_BROKER_URL'],        backend=app.config['CELERY_RESULT_BACKEND']        )    celery.conf.update(app.config)    Taskbase=celery.Task     class ContextTask(Taskbase):        abstract=True        def __call__(self,*args,**kwargs):            with app.app_context():                return Taskbase.__call__(self,*args,**kwargs)    celery.Task=ContextTask    return celeryenv=os.environ.get('WEBAPP_ENV','Last')flask_app=create_app('default')    'app.config.%sConfig' %env.capitalize()celery=make_celery(flask_app)

manage.py文件是flask-script的管理文件,里面没有任何关于celery的代码,显示出来纯粹是为了目录看的更清楚

ps:这是最初版本,日后可能会更新