gpt4 book ai didi

python - Python shelve.open 上的资源暂时不可用

转载 作者:行者123 更新时间:2023-12-01 01:36:06 24 4
gpt4 key购买 nike

我有一个执行以下操作的 Python 应用程序:

  • 由另一个进程每 2-3 分钟调用一次,以便使用 with shelve.open(shelvefilename, flag='c') 来存储对象。
  • 被另一个进程每分钟多次调用,以便使用 with shelve.open(shelvefilename, flag='r') 读取该搁置文件/里>

问题是,有时我会收到 _gdbm.error: [Errno 11] 资源暂时不可用 错误:

   File "/path/to/myprog.py", line 755, in mymethod
with shelve.open(shelvefilename, flag='r') as shlvfile:
File "/usr/local/lib/python3.6/shelve.py", line 243, in open
return DbfilenameShelf(filename, flag, protocol, writeback)
File "/usr/local/lib/python3.6/shelve.py", line 227, in __init__
Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
File "/usr/local/lib/python3.6/dbm/__init__.py", line 94, in open
return mod.open(file, flag, mode)
_gdbm.error: [Errno 11] Resource temporarily unavailable

我的猜测是,发生这种情况是因为在某个时刻我打开了搁置文件以进行读取和写入操作,即 problematic根据定义。

有什么方法可以在不影响读取操作的情况下更新搁置文件吗?

最佳答案

我刚刚在一个小模块中使用 shelve 来缓存汇率时遇到了这个问题。您可以使用 python 线程和全局 threading.Lock() 对象来解决该问题。

from threading import Lock
import shelve

mutex = Lock()

mutex.acquire()
db = shelve.open(db_name)
# write to db
db.close()
mutex.release()

代码片段的原始来源和想法的来源可以在@ http://georg.io/2014/06/Python-Shelve-Thread-Safety 找到。

“threading.Lock()”对象的工作原理是阻塞其他Python线程,直到它被释放。请参阅https://docs.python.org/2/library/threading.html#lock-objects

关于python - Python shelve.open 上的资源暂时不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52381091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com