python多进程并发redis
Redis支持两种持久化方式RDB和AOF,RDB持久化能够快速的储存和回复数据,但在服务器停机时会丢失大量数据,AOF持久化能够高效的提高数据的安全性,但在储存和恢复数据方面要耗费大量的时间,最好的方式是使用RDB-AOF混合持久化。
Redis默认RDB持久化,4.0以上支持混合持久化,首先设置AOF持久化,修改配置文件redis.conf中appendonly yes,然后设置混合持久化aof-use-rdb-preamble yes。
这里主要说明redis多进程存储,获取对象的三种方式。
- set、get机制:
数据存储方式{key:value},AOF持久化能够保证很高的可靠性。
- 连接redis:
#pool管理对一个redis server的所有连接避免每次建立、释放连接的开销
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0)
r = redis.StrictRedis(connection_pool=pool)
- 进程1/2/3…:发布对象
r.set(key, pickle.dumps(mem))
- 进程N:获取对象
value = r.get(key)
value = pickle.loads(value)
- redis delete数据
r.delete(key)
- pub/sub机制:
程序启动就一直sub,通过监听listen()得到数据来获取对象,类似Queue,系统宕机或应用程序重启都不能保存住数据
- 连接redis:
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=0)
r = redis.StrictRedis(connection_pool=pool)
ps = r.pubsub()
for channel in channels:
ps.subscribe(channel) #一个channel对应一个进程
- 进程1/2/3…:发布对象
r.publish(mem.topic, pickle.dumps(mem))
- 进程N: 获取对象
limit=10
rows=[]
for item in ps.listen(): #获得listen得到generator
if item['type'] == 'message':
message = pickle.loads(item['data'])
rows.append(message )
if len(rows) == limit: #每10个退出,再次运行程序获取第11个对象
break
这里的缺点就是数据取出后就丢失了,redis不会保存subscribe成功后的数据。
- push/pop机制:
一个name存储到一个队列中, push只管发布,不管对方是否需要都存储,只要没有pop都会永久保存在redis中,当对方需要时根据name从相应的队列pop出来,pop成功后不再保存,感觉这个是比较好用!!!
拟采用lpush()和brpop()实现,pop可以从左边pop,也可以从右边pop,这里采用rpop,根据是否自动创建name,python支持lpush和lpushx。
python多进程并发redis的更多相关文章
- Python多进程并发(multiprocessing)用法实例详解
http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...
- python多进程并发和多线程并发和协程
为什么需要并发编程? 如果程序中包含I/O操作,程序会有很高的延迟,CPU会处于等待状态,这样会浪费系统资源,浪费时间 1.Python的并发编程分为多进程并发和多线程并发 多进程并发:运行多个独立的 ...
- python 多进程并发与多线程并发
本文对python支持的几种并发方式进行简单的总结. Python支持的并发分为多线程并发与多进程并发(异步IO本文不涉及).概念上来说,多进程并发即运行多个独立的程序,优势在于并发处理的任务都由操作 ...
- Python多进程并发操作进程池Pool
目录: multiprocessing模块 Pool类 apply apply_async map close terminate join 进程实例 multiprocessing模块 如果你打算编 ...
- python多进程并发
由于Python下调用Linux的Shell命令都需要等待返回,所以常常我们设置的多线程都达不到效果,因此在调用shell命令不需要返回时,使用threading模块并不是最好的方法. http: ...
- [转]Python多进程并发操作中进程池Pool的应用
Pool类 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程,十 ...
- Python多进程并发操作中进程池Pool的应用
Pool类 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程,十 ...
- python 多进程并发接口测试实例
#encoding=utf-8 import requests import json import os import hashlib print "register------" ...
- PYTHON多进程并发WEB服务器(利用LINUX的FORK)
这个又牛X 一点点.. 这还不涉及IO,如果调用GEVENT之类作异步IO或非阻塞IO,那就大框架都有啦.. ############################################# ...
随机推荐
- An internal error occurred during: "Building workspace". GC overhead limit exceeded
1 错误描述 2 错误原因 3 解决办法
- Flex读取txt文件中的内容报错
Flex读取txt文件中的内容 1.具体错误如下 2.错误原因 读取文件不存在 var file:File = new File(File.applicationDirectory.nativePat ...
- 用DriverStudio开发USB驱动程序
很多写Windows Device Driver的开发人员基本上都是使用Windows DDK进行开发的.但是,现在也有不少人都开始借助一些辅助工具.笔者去年开始接触到DriverStudio,发现它 ...
- PCI-E配置MSI中断流程解析
在传统的pci中断体系中,每一个pci总线上的设备被分配一个特定的中断号,然后当设备需要中断cpu时,设备直接发出int信号,然后在cpu的inta引脚拉低的时候将自己的中断号放在数据总线上,一切都要 ...
- java查看程序执行时间
public static void main(String[] args) { long a= System.currentTimeMillis();//获取当前系统时间(毫秒) for (int ...
- Maven 搭建 SSM 项目 (oracle)
简单谈一下maven搭建 ssm 项目 (使用数据库oracle,比 mysql 难,所以这里谈一下) 在创建maven 的web项目时,常常会缺了main/java , main/test 两个文件 ...
- 谈谈MySQL的事务隔离级别
这篇文章能够阐述清楚跟数据库相关的四个概念:事务.数据库读现象.隔离级别.锁机制 一.事务 先来看下百度百科对数据库事务的定义: 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.事务处理 ...
- css块级元素和内联元素
左边的是块级元素block,右边内联inline. 修改方法 display: inline;
- anguar-select2
<!DOCTYPE html> <html ng-app="App"> <head> <meta charset="UTF-8& ...
- JS合并两个数组的方法
JS合并两个数组的方法 我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况.比如: var a = [1,2,3]; var b = [4,5,6]; 有两个数组a.b,需求是将两个数组合 ...