比较简单的celery配置
pip install celery
pip install flask_mail
新建celery_task python 包,名字自定义放在项目根目录
-----celery_task
|-- __init__.py
|--tasks.py
init.py
from celery import Celery
def make_celery(app):
celery = Celery('default', backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL'])
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery
tasks.py
from flask_mail import Message
from celery_task import make_celery
from exts import create_app, mail
celery = make_celery(create_app())
@celery.task
def send_mail(email=None, bug=None):
# print(email, bug)
msg = Message(subject="xhx-oms BUG提醒",
recipients=[email])
msg.body = bug
mail.send(msg)
# print('ok')
return 'success'
配置
跟目录路径
ext.py
config.py
cofig.py
# 配置worker
CELERY_BROKER_URL = "redis://127.0.0.1:6379/5"
# 配置backend
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/6"
# 邮件配置
MAIL_SERVER = "smtp.163.com"
MAIL_USERNAME = "邮箱"
MAIL_PASSWORD = "密码"
MAIL_DEFAULT_SENDER = "默认发送人"
MAIL_USE_SSL = True
# MAIL_USE_TLS = False
# MAIL_PORT = 465
# 端口号25一般被服务器封掉,不能使用,采用587或者465
MAIL_PORT = 587
CELERY_TIMEZONE = "Asia/Shanghai"
CELERY_FORCE = True
ext.py
mail = Mail()
def create_app():
app = Flask(__name__)
app.config.from_object(config)
app.config.from_object(schedule_config)
# scheduler.init_app(app)
db.init_app(app)
mail.init_app(app)
# celery.init_app(app=app)
# scheduler.start()
return app
centos开启worker
需要把项目文件拷贝到服务上,进入虚拟环境,安装好对应的包和redis
celery -A celery_task.tasks worker --loglevel=info
代码端调用(参数由上面封装的任务决定)
tasks.send_mail.apply_async(args=['needones@126.com', '测试'])