什么是uWSGI
使用python的同学对uWSGI应该都比较熟悉,它一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。同时它还具有配置、进程管理、socket创建、监控、日志记录、共享内存块、ipc、集群成员和 uWSGI订阅服务器的功能。
今天要介绍的是uWSGI在1.9版本后新加uWSGI Legion子系统,这个功能非常的惊喜。众所周知的在一个celery集群中只能同时存在一个beat进程,这么重要的一个进程却只能是单点,风险非常高,也调研过包括keepalive和zookeeper,但在使用和搭建上都比较复杂,关键天生的不太适合python。废话不多说,我们一起看看如何用uWSGI来做celery管理beat
服务配置
环境准备
这部分比较简单,我只说关键步骤
- 需要两台linux服务器,我使用的ubuntu14.04, 地址分别是:192.168.1.161, 192.168.1.162
- 分别在两台设备上安装virtualenv ,并创建虚拟环境。
- 在虚拟环境下通过pip安装uWSGI和celery。
- 安装redis。
测试代码和配置
创建celery测试项目
废话不多说,直接上代码,新建目录 uwsgi-beat,创建测试app
1、tasks.py
from celery_app import app
@app.task(queue='default')
def add(x, y):
return x + y
@app.task(queue='default')
def sub(x, y):
return x - y
2、celery_config.py
#-*-coding=utf-8-*-
from __future__ import absolute_import
from celery.schedules import crontab
# 中间件
BROKER_URL = 'redis://192.168.1.33:6379/7'
# 结果存储
CELERY_RESULT_BACKEND = 'redis://192.168.1.33:6379/8'
# 默认worker队列
CELERY_DEFAULT_QUEUE = 'default'
# 异步任务
CELERY_IMPORTS = (
"tasks"
)
from datetime import timedelta
# celery beat
CELERYBEAT_SCHEDULE = {
'add':{
'task':'tasks.add',
'schedule':timedelta(seconds=3),
'args':(