多线程与双端队列结合使用,实现持久化任务(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
原创粉丝点击