持久(基于磁盘)队列的集合
queuelib的Python项目详细描述
queuelib是python的持久(基于磁盘)队列的集合。
queuelib的目标是速度和简单性。它最初是Scrapy framework的一部分,并在自己的库中剥离出来。
注意:queuelib不是线程安全的。
要求
- python 2.7或python 3.3
- 无外部库要求
安装
您可以通过python包索引(pypi)或 来源。
使用pip安装:
$ pip install queuelib
使用简易安装进行安装:
$ easy_install queuelib
如果您下载了源tarball,可以通过运行 以下(作为根):
# python setup.py install
先进先出/后进先出磁盘队列
queuelib提供fifo和lifo队列实现。
下面是fifo队列的使用示例:
>>> from queuelib import FifoDiskQueue >>> q = FifoDiskQueue("queuefile") >>> q.push(b'a') >>> q.push(b'b') >>> q.push(b'c') >>> q.pop() b'a' >>> q.close() >>> q = FifoDiskQueue("queuefile") >>> q.pop() b'b' >>> q.pop() b'c' >>> q.pop() >>>
后进先出队列是相同的(按api),但导入LifoDiskQueue 相反。
优先级队列
由多个fifo/lifo队列组合实现的离散优先级队列 (每个优先级一个)。
首先,选择每个优先级(先进先出或后进先出)要使用的队列类型:
>>> from queuelib import FifoDiskQueue >>> qfactory = lambda priority: FifoDiskQueue('queue-dir-%s' % priority)
然后用它实例化优先级队列:
>>> from queuelib import PriorityQueue >>> pq = PriorityQueue(qfactory)
使用它:
>>> pq.push(b'a', 3) >>> pq.push(b'b', 1) >>> pq.push(b'c', 2) >>> pq.push(b'd', 2) >>> pq.pop() b'b' >>> pq.pop() b'c' >>> pq.pop() b'd' >>> pq.pop() b'a'
roundrobinqueue
与优先级队列具有几乎相同的接口和实现,但 每个元素都必须用(强制的)键来推动。从 队列循环通过键“循环”。
以类似于优先级队列的方式实例化循环队列:
>>> from queuelib import RoundRobinQueue >>> rr = RoundRobinQueue(qfactory)
使用它:
>>> rr.push(b'a', '1') >>> rr.push(b'b', '1') >>> rr.push(b'c', '2') >>> rr.push(b'd', '2') >>> rr.pop() b'a' >>> rr.pop() b'c' >>> rr.pop() b'b' >>> rr.pop() b'd'
邮件列表
有关queuelib的问题,请使用scrapy-users邮件列表。
错误跟踪程序
如果您有任何建议、错误报告或烦恼,请向 我们的问题跟踪程序位于:http://github.com/scrapy/queuelib/issues/
贡献
queuelib的开发发生在github:http://github.com/scrapy/queuelib
我们非常鼓励您参与开发。如果你不喜欢 Github(出于某种原因)欢迎您发送常规补丁。
所有更改都需要合并测试。
测试
测试位于queuelib/tests目录中。他们可以用 nosetests使用以下命令:
nosetests
输出应该如下:
$ nosetests ............................................................................. ---------------------------------------------------------------------- Ran 77 tests in 0.145s OK
许可证
此软件是根据BSD许可证授权的。请参阅 完整许可证文本的顶级分发目录。
版本控制
这个软件遵循Semantic Versioning