一个好的Python持久化同步队列

9
我不立即关心fifo或filo选项,但将来可能会有所帮助。
我正在寻找一种快速简单的方法,在磁盘上存储(最多1GB数据或数千万条目),可以由多个进程获取和放置。 条目只是简单的40字节字符串,而不是Python对象。 不需要shelve的所有功能。
我看到了这个http://code.activestate.com/lists/python-list/310105/ 它看起来很简单。 它需要升级到新的队列版本。
想知道是否有更好的东西? 我担心在断电事件发生时,整个pickled文件会变得损坏,而不仅仅是一个记录。

2
如果您知道数据的确切宽度,并且延迟不是问题,那么使用数据库并不是一个不合理的解决方案。您可以使用SQLite作为非常简单的解决方案。 - Endophage
4个回答

4

这是一个很老的问题,但persist-queue似乎是这种任务的一个不错的工具。

persist-queue实现了基于文件的队列和一系列基于sqlite3的队列。其目标是实现以下要求:

  • 基于磁盘:每个排队项都应存储在磁盘中,以防任何崩溃。
  • 线程安全:可以由多线程生产者和多线程消费者使用。
  • 可恢复性:处理重启后可以读取项目。
  • Green-compatible:可以在greenlet或eventlet环境中使用。

默认情况下,persist-queue使用pickle对象序列化模块来支持对象实例。大多数内置类型,如int、dict、list都能够直接通过persist-queue持久化,为支持自定义对象,请参考Python2的Pickling and unpickling extension types或Python3的Pickling Class Instances。


3

尝试使用Celery。它不是纯Python,因为它使用RabbitMQ作为后端,但它可靠、持久且分布式,在长期运行中总体来说比使用文件或数据库更好。


3

我认为PyBSDDB是你所需要的。你可以选择队列作为访问类型。PyBSDDB是基于Oracle Berkeley DB的Python模块。 它具有同步访问,虽然我不知道从Python绑定是否可以从不同的进程中访问它。关于多个进程写入数据库,我在这个帖子中找到了一些信息。


-3

文件使用不正常?...

使用日志文件系统来从电源中断中恢复。那就是它们的目的。


4
记录日志有助于维护元数据的一致性,而不是数据。仅使用普通文件很容易丢失您的数据。 - Oleksandr Pryimak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接