您的位置:首页 > 产品设计 > UI/UE

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

2017-12-05 11:07 381 查看

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

备注:前提是已经按照好了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 Celery
celery=Celery()


__init__.py

# -*- coding:utf-8 -*-
from flask import Flask
from config import config
from flask_sqlalchemy import SQLAlchemy
from datetime import timedelta
###从自己写的extensions.py导入celery
from .extensions import celery

db = 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 celery
from 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 timedelta
class Config(object):
###自己的内容

###关键!配置celery
class 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 os
from app import create_app
from celery import Celery
from app.tasks import log
from config import config

def 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 celery
env=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:这是最初版本,日后可能会更新
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python celery