在网站开发中, Queue Server是广泛使用的组件,实现有简单又复杂,其作用表现为
1:使系统的任务更容易分布式处理, 通过tcp/ip网络连接,实现部署透明。
2 : 实现任务发布和处理解耦合。发布者不用管处理的组件是谁,同样处理者也不用管发布者是谁。多发布者/多消费者模型可以天然契合。
3 : 能缓冲系统中某些部件的压力,创建任务和处理任务的速率可以不一致。
Redqueue就是一个这样的组件,redqueue是本人在业余时间搞的一个开源项目, 放在github上,有兴趣的同志们可以用用,充当小白鼠,当然要是在生产环境中使用更好了。
RedQueue参考了github开源项目starling(ruby写的), twitter曾经使用伊做队列服务,后来改成了用scala写的scaling(kestrol) . Redqueue用python的高性能框架tornado写成。支持memcache协议, 也就是说伪装成一个memcache server,由于许多语言都有了memcache库,也就有了应用redqueue的土壤。
redqueue是可以持久化的,使用日志文件记录所有的操作,当系统重启的时候,可以恢复没有处理的未超时任务重新处理。 这样对于server端的容错性有好处。更进一步的是,redqueue具有客户端容错性,客户通过get命令从队列中得到一个任务,使用delete删除这个任务,如果没有delete而因某种原因退出了,则该任务会被server重新塞入队列等待处理。
安装:
安装redqueue甚为简单,python setup.py install就可以
运行server用redqueue_server.py 命令,其他参数则可以看redqueue_server.py --help
客户端实例
# 初始化客户端
import memcache
mc = memcache.Client(['127.0.0.1:12345']) # 假设redqueue server守候在localhost的12345端口
# 发布一个项目到key myqueue中, 值为"Hello world"
mc.set("myqueue", "Hello world")
# 消费者从queue server中取出一个任务, 并打印
print mc.get("myqueue") # 应该是 Hello world
# 删除一个任务,必须做,否则server会认为客户端异常发生了,而重新队列处理该任务
# 什么时候客户端确认该任务已经确保执行了,就可以delete掉。在这之间,任务不会被其他客户端执行。
mc.delete("myqueue")
分享到:
相关推荐
记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3,如果T1+T3>T2,那说明开启一个线程来执行这个任务太不划算了!在线程池缓存线程可用已有的闲置线程来执行新任务,避免了创建/销毁带来的系统开销。 ...
用python实现航道排队。
queue是python中的标准库,俗称队列。这篇文章给大家介绍了Python3 queue队列模块,包括模块中的常用方法及构造函数,需要的朋友参考下吧
基于python实现的sqlite队列,方便的处理sqlite并发。SqliteQueue是继承了threading.Thread的线程,并且维护了一个向sqlite请求的队列。支持peewee请求。SqlQuery简单的封装了SQL语句
python 队列的使用 python2例程展示了队列的使用过程,供学习参考使用 队列:Queue queue_test.py put()函数主动改变队列 get()函数阻塞,代替查询 Produser & Consumer 定期生产,一有货就被抢购 ...
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 class Queue.Queue(maxsize=0) FIFO即First ...
基于python实现的sqlite队列,方便的处理sqlite并发。并且包含一个十分简洁好用的SQL语句包装。
2.Python实现ADT Queue 采用List来容纳Queue的数据项 将List首端作为队列尾端;List的末端作为队列首端 enqueue()复杂度为O(n) dequeue()复杂度为O(1) class Queue: #初始化 def _init_(self): self.items=[] ...
本文实例讲述了Python实现队列的方法...#调用list的列表的pop()函数.pop(0)为列表的第一个元素 def deQ(): if len(queue) == 0: print 'Cannot pop from an empty queue!' else: print 'Removed [', queue.pop(0) ,
Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent
Python手撕算法Queue
linux上queue.h,可用于一直实现双向链表.亲测非常好用 linux上queue.h,可用于一直实现双向链表.亲测非常好用 linux上queue.h,可用于一直实现双向链表.亲测非常好用
基于Python实现的数据结构与算法完整源代码+超详细注释(包含46个作业项目) 项目包含: 01_变位词问题 02_python数据类型的性能 ...a1_查找第一个和最后一个元素位置 a2_斐波那契数列 aa_LCS aa_最长公共子序列
基于python的数据结构代码实现-队列Queue
队列 数据类型及Python实现队列 Queue队列 Queue的Python实现 队列 Queue 队列是种 从一端进入,从另一端排出 的数据类型。举个例子,像排队买票,后来的人总是排在最后,前面的人买完票就会离开队列。 所以 队列 ...
python库。 资源全名:persist_queue-0.4.2-py2.py3-none-any.whl
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) ...进程或线程可以用类,也可以用函数实现,代码在windows下实现
任务队列 环境准备 Python Redis ...RQ ...Redis Server # docker pull redis:latest ...运行一个任务 # python create.py import sys import os import time from redis import Redis from rq import Queue from rq.j
这个 Python Demo 演示了如何结合 queue 模块和 tkinter 库来创建一个能够即时更新显示时间的图形用户界面(GUI)。通过 queue 队列,我们可以将更新 GUI 的任务安全地传递给主线程,从而避免因为直接在子线程中更新...