Python 伯克利数据库队列

Posted

技术标签:

【中文标题】Python 伯克利数据库队列【英文标题】:Python Berkeley Database QUEUE 【发布时间】:2019-02-14 05:23:53 【问题描述】:

如何使用 python 中的 Berkely 数据库队列?我在任何地方都找不到示例。

这是我迄今为止最好的尝试,但它引发了无效参数错误。

import bsddb3
import os

db = bsddb3.db.DB()
db.open(os.path.abspath("test.db"),bsddb3.db.DB_QUEUE,bsddb3.db.DB_TRUNCATE | bsddb3.db.DB_CREATE)
# Next line raises bsddb3.db.DBInvalidArgError: (22, "Invalid argument -- BDB0104 9 larger than database's maximum record length 0")
db.put(db.stat()['cur_recno'],'"rec":1')
print(db.consume())

【问题讨论】:

【参考方案1】:

您需要在 QUEUE 上调用 set_re_len 来指定数据长度。我在记录长度下的文档中找到了解决方案。

https://docs.oracle.com/cd/E17276_01/html/programmer_reference/rq_conf.html#am_conf_recno

import bsddb3
import os

db = bsddb3.db.DB()
db.set_re_len(1024)
db.open(os.path.abspath("test.db"),bsddb3.db.DB_QUEUE,bsddb3.db.DB_TRUNCATE | bsddb3.db.DB_CREATE)

db.put(1,'"rec":1'.encode('utf-8'),None,bsddb3.db.DB_APPEND)
db.put(1,'"rec":2'.encode('utf-8'),None,bsddb3.db.DB_APPEND)

print(db.consume()[1].decode('utf-8').strip())
print(db.consume()[1].decode('utf-8').strip())

db.close()

此代码有效,但记录的长度是固定的,这就是此代码去除空格的原因。

【讨论】:

以上是关于Python 伯克利数据库队列的主要内容,如果未能解决你的问题,请参考以下文章

含10,000 Python问题,伯克利联合团队推出新的代码生成评价基准

python实现一个简单的网络聊天程序

UC伯克利提出多任务框架SLIP

综述 | 伯克利《高效神经网络推理的量化方法》

LeCun带两位UC伯克利华人博士提出「循环参数生成器」

6何为伯克利数据分析栈BDASMP3