0
これは、Python 2.7のコンテキストマネージャーでの再入力によるファイルロックの良い方法ですか?私は、rlock()が効果的になるようにしたいので、単一のデータベースファイルを使用するマルチスレッドアプリケーションを得ることができます。SQlite3コンテキストマネージャー(Python 2.7でファイルをロックする)
import sqlite3
import threading
import os
class ConnectionHolder:
def __init__(self, connection):
self.path = connection
self.lock = threading.RLock()
def __enter__(self):
self.lock.acquire()
self.connection = sqlite3.connect(self.path)
self.cursor = self.connection .cursor()
return self.cursor
def __exit__(self, exc_class, exc, traceback):
self.connection .commit()
self.connection .close()
self.lock.release()
conn_holder = ConnectionHolder(os.path.join(os.path.dirname(__file__), 'data/db/database.db'))
if __name__ == '__main__':
with conn_holder as c:
c.execute("SELECT * FROM 'sample_table'")
result = c.fetchall()
print result
SQLiteはあなたのために[注意してください](https://sqlite.org/threadsafe.html)する必要があります。 – Goyo
私はデータベースのロックエラーが発生したので、私は他の解決策を探しています。 – morpheus65535
所有者専用のロックは役に立ちません。とにかく、ビジータイムアウトを増やすだけです。 –