多线程与双端队列结合使用,实现持久化任务(3)
来源:互联网 发布:万网域名管理系统 编辑:程序博客网 时间:2024/04/29 20:54
python的任务持久化方式有多种,根据业务设计,巧借助读写文件的方式,自创实现任务的持久化。
特点:多任务去重;持久化的任务load后,重新入队列;适合任何数据类型。
class TaskQueue(object): def __init__(self): super(TaskQueue, self).__init__() self.items = collections.deque() self.task = [] def pop(self): if self.size() != 0: item = self.items.popleft() del self.task[0] return item else: pass def lpush(self,task): if task not in self.items: self.items.appendleft(task) self.task.insert(0,task) else: pass def rpush(self,task): if task not in self.items: self.items.append(task) self.task.append(task) else: pass def size(self): task_size = len(self.items) return task_size #持久化方法 def persistent(self): per_task = open("task.json","w") per_task.write(json.dumps(self.task)) per_task.close() def load(self): """从磁盘中取出任务""" task = open("task.json","r") items = task.read() task_queue = json.loads(items) for i in task_queue: self.rpush(i) return items task.close()#测试持久化if __name__ == '__main__': tq = TaskQueue() r1 = {"name":"rocket","number":2016} r2 = {"name":"zhouruifu","number":[23,54,32,63,45,63,575]} r3 = {"name":"hello","number":03454} l = {"name":"python","url":"http://blog.csdn.net/zhouruifu2015/article/details/50909663"} #多次重复压入队列 tq.rpush(r1) tq.rpush(r2) tq.rpush(r3) tq.lpush(l) tq.rpush(r1) tq.rpush(r2) tq.rpush(r3) tq.lpush(l) print tq.size() print tq.task print "持久化。。。。。" tq.persistent() print tq.load() print tq.pop() print tq.task tq.persistent() print tq.load() print "持久化。。。" print tq.pop() tq.persistent() print tq.load()#测试取出持久化任务if __name__ == '__main__': tq = TaskQueue() #取出持久化的数据 print tq.task item = tq.load() print tq.task print tq.items tq.pop() print tq.task tq.persistent() tq.pop() print tq.task tq.persistent() tq.pop() print tq.task持久化测试结果:
取出持久化任务:
双端队列的用法:http://blog.csdn.net/zhouruifu2015/article/details/50909663
1 0
- 多线程与双端队列结合使用,实现持久化任务(3)
- 多线程与双端队列结合使用,实现持久化任务(1)
- 多线程与双端队列结合使用,实现持久化任务(2)
- 多线程任务队列MulitiThreadJob实现
- C++任务队列与多线程
- C++任务队列与多线程
- C++任务队列与多线程
- C++任务队列与多线程
- C++任务队列与多线程
- C++任务队列与多线程
- C++任务队列与多线程
- 使用Redis实现任务队列
- 使用GCD实现多线程队列
- java队列、栈和多线程结合使用的例子
- Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(三)Quartz持久化
- RabbitMQ之队列与消息持久化
- RabbitMQ之队列与消息持久化
- RabbitMQ队列与消息的持久化
- Android更改项目名称,成为焕然一新的项目
- 第二次上机实验 三合一
- 删除listview中itme的动画效果
- C++实验2-分级函数求值、两点距离、模拟ATM
- 第二次上机实验
- 多线程与双端队列结合使用,实现持久化任务(3)
- 【Discuz插件】在线视频教程 商业版V2.0下载,打造在线云课堂教育培训网站
- 快速排序
- 记车架号识别程序部署参考文档
- C++第2次实验(1)
- PHP - Traversable接口详解
- PS教程!简单3步教你快速画出时尚漂亮的弥散阴影
- Codeforces 283E Cow Tennis Tournament (扫描线+计数)
- 微信公众平台页面授权处理方法(单一方法处理)