Python死锁错误-尝试从搁置中检索键值

Python死锁错误-尝试从搁置中检索键值,python,cgi,Python,Cgi,这是我更新搁置中记录的代码 def updateRecord(db, form): if not 'key' in form: fields = dict.fromkeys(fieldnames, '?') fields['key'] = 'Missing key input' else: key = form['key'].value if key in db: record = db[ke

这是我更新搁置中记录的代码

def updateRecord(db, form):
    if not 'key' in form:
        fields = dict.fromkeys(fieldnames, '?')
        fields['key'] = 'Missing key input'
    else:
        key = form['key'].value
        if key in db:
            record = db[key]
        else:
            from person import Person
            record = Person(name='?',age='?')
        for field in fieldnames:
            setattr(record, field, eval(form[field].value))
        db[key] = record
        fields = record.__dict__
        fields['key'] = key
    return fields
当我试图从搁置中检索值时,我得到了这个错误

>>> import shelve
>>> db = shelve.open('class-shelve')
>>> db['sue'].name
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/shelve.py", line 121, in __getitem__
    f = StringIO(self.dict[key])
  File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in __getitem__
    return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
  File "/usr/lib/python2.7/bsddb/dbutils.py", line 68, in DeadlockWrap
    return function(*_args, **_kwargs)
  File "/usr/lib/python2.7/bsddb/__init__.py", line 270, in <lambda>
    return _DeadlockWrap(lambda: self.db[key])  # self.db[key]
KeyError: 'sue'
导入搁置 >>>db=搁置。打开('class-shelve')) >>>db['sue'].名称 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/lib/python2.7/shelve.py”,第121行,在__ f=StringIO(self.dict[key]) 文件“/usr/lib/python2.7/bsddb/_init__.py”,第270行,在_getitem中__ return _DeadlockWrap(lambda:self.db[key])#self.db[key] 文件“/usr/lib/python2.7/bsddb/dbutils.py”,第68行,以死锁方式保存 返回函数(*_args,**_kwargs) 文件“/usr/lib/python2.7/bsddb/_init__.py”,第270行,在 return _DeadlockWrap(lambda:self.db[key])#self.db[key] 关键错误:“sue”
有什么见解吗?

假设在第一个代码段中,
db
变量是一个“shelf”对象,那么,尽管行

db[key] = record
db.sync()
…将新的密钥/值对添加到“工具架”,它不一定会将内容刷新到磁盘,因此共享同一“工具架文件”的其他进程将无法使用它

您可以通过添加行来强制将“shelf file”写入磁盘

db[key] = record
db.sync()

…在添加新的键/值对后,但当“shelf file”变大时,速度可能会非常慢,因此您可能不想太频繁地调用它。

执行print
db
以查看字典的内容。我猜苏不会是个关键人物。你的问题是什么还不清楚。第一个代码段与第二个代码段有什么关系?