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.youkuaiyun.com/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.youkuaiyun.com/zhouruifu2015/article/details/50909663
更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。
关于公众号的描述访问如下链接