在网站开发中, 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")
分享到:
相关推荐
在Python中实现WebSocket服务器,我们可以使用多种库,如`socketserver`、`asyncio`、`websockets`等。本项目着重介绍基于`websockets`库的Python WebSocket服务器的实现。 首先,我们需要安装`websockets`库,可以...
记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3,如果T1+T3>T2,那说明开启一个线程来执行这个任务太不划算了!在线程池缓存线程可用已有的闲置线程来执行新任务,避免了创建/销毁带来的系统开销。 ...
标题中的“基于python实现的sqlite队列sqlite-queue-python-master”指的是一个Python库或项目,它的主要功能是为SQLite数据库提供一种队列管理机制,以支持并发操作。在多线程或多进程环境中,数据访问的并发控制至...
在Python3中,使用`queue`模块创建一个队列非常简单: ```python import queue q = queue.Queue() ``` 这里创建了一个无限制大小的普通队列。你可以通过`put()`方法向队列添加元素,如`q.put(item)`,以及通过`...
下面是一个简单的代码示例,展示了如何使用`queue`模块创建队列以及使用其基本方法: ```python import queue # 创建一个FIFO队列 q = queue.Queue() # 检查队列是否为空 print(q.empty()) # 输出:True # 向...
本 Demo 演示了如何使用 Python 的标准库 queue 和 tkinter 来创建一个简单的图形用户界面(GUI)。此 Demo 的目的是展示如何通过队列实现 GUI 的即时刷新,尤其是在进行耗时操作时保持界面的响应性。 系统要求: ...
### 使用Python实现批量Ping操作详解 #### 背景与需求 在运维、网络管理和自动化测试等场景中,经常需要检查一系列服务器或者设备的连通性。传统的手动方式或者简单的命令行工具(如Windows下的`ping`命令)无法...
用python实现航道排队。
基于python实现的sqlite队列,方便的处理sqlite并发。SqliteQueue是继承了threading.Thread的线程,并且维护了一个向sqlite请求的队列。支持peewee请求。SqlQuery简单的封装了SQL语句
考虑到“简单”和“易用”的特点,一个可能的实现是使用Python的内置`queue`模块,它提供了线程安全的队列操作。 2. **生产者(Producer)**:生产者是将消息放入队列的组件。你可以编写一个函数或类,接收用户输入...
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 class Queue.Queue(maxsize=0) FIFO即First ...
本教程将详细讲解如何使用Python实现直播源代码,特别是利用multiprocessing模块进行实时图片传输。 首先,让我们了解什么是multiprocessing模块。在Python中,multiprocessing模块提供了进程间的并行计算,这与...
`_init(maxsize)`内部使用了Python的`collections.deque`双端队列实现,这使得在两端添加或删除元素非常高效。 `queue`模块为了保证线程安全,使用了互斥锁(`mutex`)和条件变量。互斥锁(`self.mutex`)确保任何...
创建一个`deque`实例,然后使用`append()`添加元素到队尾(右端),使用`popleft()`移除元素并返回队头元素(左端)。 3. **线程安全的队列** 如果在多线程环境中使用队列,需要确保操作的原子性,防止数据竞争。...
首先,NS2(Network Simulator 2)是一个广泛使用的开源网络模拟器,它允许研究人员和学生模拟各种网络协议和拓扑结构。NS2以其灵活性和可扩展性著称,可以用于研究从局域网到互联网的各种规模的网络问题。 RED...
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) ,
本教程将详细讲解如何使用Python的多线程来实现对多个网址的快速访问,并记录访问结果。 首先,我们需要导入Python的`threading`模块,它是Python标准库中的多线程支持库。`threading.Thread`是创建新线程的类,而`...
Python中的线程池是一种高效的管理线程资源的方式,它允许我们预先创建一组线程,并将任务提交给这些线程去执行,而不是每来一个任务就创建一个新线程。这在处理大量并发任务时,可以避免频繁创建和销毁线程带来的...
在这个"Python实现自动化喊麦demo"项目中,我们利用Python的语音处理能力,创造了一个能够自动播放喊麦歌曲的程序。这个项目的核心是通过编程实现对音频文件的操作,以达到模拟MC的效果。 首先,我们要了解Python中...