栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

浅试celery和redis

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

浅试celery和redis

celery

        celery 是由python开发的 ,简单、灵活、可靠的分布式任务处理框架,celery本身不提供队列服务,对接用Redis或RabbitMQ实现队列服务

celery 的5个角色
  • Task:就是任务,有异步任务和定时任务

  • Broker:中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。

  • Worker:执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。

  • Beat:定时任务调度器,根据配置定时将任务发送给Broker。

  • Backend

celery分布式任务处理模块

任务处理

  1. 获取监控项

  2. 获取数据库日志

  3. 对比数据库日志和监控项阈值,如果超出范围就发邮件告警

部署celery

#安装celery
pip install  celery
#python 里连接redis的模块库
pip install  redis
#以下三个文件部署完成后启动worker
[root@nginx-kafka01 flask_log]#celery -A app.celery_app worker --loglevel=INFO -n node1#启动beat
[root@nginx-kafka01 flask_log]# celery -A celery_app beat --loglevel=INFO

config.py

from celery.schedules import crontab
#配置消息中间件的地址
BROKER_URL = "redis://192.168.174.134:6379/1"
#配置结果存放地址
CELERY_RESULT_BACKEND = "redis://192.168.174.134:6379/2"
#启动celery时,导入任务
CELERY_IMPORTS = {
    'celery_tasks'
}
#时区
CELERY_TIMEZONE = "Asia/Shanghai"
#设置定时任务
CELERYBEAT_SCHEDULE = {
    'log-every-minute':{
        'task' : 'celery_tasks.scheduled_task',
        'schedule' : crontab(minute='*/1')
 }
}

app.py

from celery import Celery
​
#实例化celery对象,传入一个名字即可
celery_app = Celery('celery_app')
celery_app.config_from_object('config')
celery_tasks.py

from app import celery_app
​
@celery_app.task
def scheduled_task(*args,**kwargs):
    print("this is schedule task")
redis

        redis是一种键值存储的数据库(0-15)。

部署redis

##############安装redis
yum  install epel-release -y
yum install redis -y
#修改监听ip
vim /etc/redis.conf
bind 0.0.0.0
启动默认绑定127.0.0.1,外界访问不进来
#启动redis
[root@nginx-kafka01 ~]# systemctl start redis
[root@nginx-kafka03 ~]# redis-cli
127.0.0.1:6379> select 1
#字符串赋值
127.0.0.1:6379[3]> set a 123
OK
#字符串取值
127.0.0.1:6379[3]> get a
"123"
#列表存值
127.0.0.1:6379[3]> LPUSH sanchuang cali
(integer) 1
127.0.0.1:6379[3]> LPUSH sanchuang 1
(integer) 2
127.0.0.1:6379[3]> LPUSH sanchuang nnn
(integer) 3
127.0.0.1:6379[3]> LPUSH sanchuang yyy
(integer) 4
#先进先出,左右
127.0.0.1:6379[3]> lrange sanchuang 0 10
1) "yyy"
2) "nnn"
3) "1"
4) "cali"
#删除最后一个,返回被删除的值
127.0.0.1:6379[3]> rpop sanchuang
"cali"
127.0.0.1:6379[3]> lrange sanchuang 0 10
1) "yyy"
2) "nnn"
3) "1"

memcached vs redis

        memcached只是在内存中运行的redis可以固化,可以把数据写到磁盘里面去,redis是一种键值存储的数据库。

redis开启持久化的两种模式:

  • AOF 全持久化模式 每一次操作都会同步到磁盘(每一次操作的日志,如果丢失可以根据日志恢复)

  • RDB 半持久化模式 定时的将内存内容快照写入磁盘(每次写入都会覆盖之前的快照--备份)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号