在python使用Berkeley DB之时DEADLOCK_WRAP错误(bsddb)
-
24-09-2019 - |
题
我使用的是启用berkdb来存储一个巨大的键值对的列表中,但由于某种原因,当我尝试访问某些数据后,我得到这个错误:
try:
key = 'scrape011201-590652'
contenttext = contentdict[key]
except:
print the error
<type 'exceptions.KeyError'> 'scrape011201-590652' in
contenttext = contentdict[key]\n', ' File "/usr/lib64/python2.5/bsddb/__init__.py",
line 223, in __getitem__\n return _DeadlockWrap(lambda: self.db[key]) #
self.db[key]\n', 'File "/usr/lib64/python2.5/bsddb/dbutils.py", line 62, in
DeadlockWrap\n return function(*_args, **_kwargs)\n', ' File
"/usr/lib64/python2.5/bsddb/__init__.py", line 223, in <lambda>\n return
_DeadlockWrap(lambda: self.db[key]) # self.db[key]\n']
我不知道什么是DeadlockWrap但心不是任何其他程序或进程访问启用berkdb或写它(据我所知)所以不知道我们如何能够得到一个僵局,如果它指的是。难道我试图访问数据迅速?我在一个循环中调用该函数,所以像
for i in hugelist:
#try to get a value from the berkdb
#do something with it
我有多个数据集运行这个和这个错误只与其中一人发生最大的一个,而不是其他。
解决方案
我敢肯定的DeadlockWrap
东西是不是与此有关。这是一个简单的方法来自动地提供与重试回退的策略一>。换句话说,如果数据库操作失败,它等待再一点点再次尝试,多次最终失效之前。
您似乎正在从你的字典KeyError
操作这更可能是一个get
由于您使用的钥匙实际上并不存在于数据库中。
喜欢的东西试试你的代码:
try:
key = 'scrape011201-590652'
if not contentdict.has_key(key):
print "Urk!, No record for %s"%(key)
contenttext = contentdict[key]
except:
print the error
这将显示如果该记录不存在于表中(通过输出Urk!
消息)。至于你在这种情况下做什么,这取决于你的架构。你可能会想回到要么None
或空字符串。您可能还需要你在做什么,现在(抛出一个异常)。
其他提示
contenttext = contentdict[key] if contentdict.has_key(key) else None
不隶属于 StackOverflow