![](/img/trans.png)
[英]How do I open a document (eg. .txt) in another app from a Python Script mac
[英]Python app-level document/record locking (eg. for MongoDB)
MongoDB不提供鎖定文檔的方法(例如RDBMS中的SELECT FOR UPDATE)。
推薦了一種隔離操作序列的方法,有時也稱為樂觀鎖定 ,但是在某些情況下,這種方法似乎過於復雜甚至效率低下(這就是為什么仍使用悲觀鎖定的原因)。
我想在應用程序級別實現通用文檔鎖定。 假設我只有一個應用程序可以處理集合。 而且我的應用程序是多線程的 。
使用場景:
with DocumentLock(doc_id):
# make sure no other thread interferes
doc=db.doc_collection.find_one(doc_id)
... # analyse and update the document
db.doc_collection.save(doc)
您會為任務推薦什么解決方案?
這是我的DocumentLock類:
class DocumentLock(object):
_lock=RLock() # protects access to _locks dictionary
_locks=WeakValueDictionary()
def __init__(self, doc_id):
self.doc_id=doc_id
def __enter__(self):
with self._lock:
self.lock=self._locks.get(self.doc_id)
if self.lock is None:
self._locks[self.doc_id]=self.lock=RLock()
self.lock.acquire()
def __exit__(self, exc_type, exc_value, traceback):
self.lock.release()
self.lock=None # make available for garbage collection
所以基本上我有一個RLocks字典,每個訪問的文檔一個RLock。 我使用弱引用來擺脫未使用的鎖。
可以為需要記錄鎖定的每個集合(或表)子類化DocumentLock。
這一切似乎都可行(盡管未在並發下進行測試),但我不確定這種方法是否存在弱點,或者是否有更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.