为了访问数据库并同时避免两次提交,我尝试使用BoundedSemaphore
(see here),如下所示:
from threading import BoundedSemaphore
...
commit_sema = BoundedSemaphore(value=1)
class Sqlite(object):
...
def commit():
commit_sema.acquire()
self.conn.commit() # self.conn is the Connection object
commit_sema.release()
但是虽然我确保使用Sqlite
类的相同实例,但我看到在第一个完成之前已经进行了第二次commit()
调用。
我的印象是第二次通话应该被阻止,直到第一个来电呼叫release()
来增加Semaphore
计数器。但这种情况并非如此。
那么我在这里看错了什么?如何正确地做到这一点?