一度に1つのインスタンスのみを実行することになっているThread
-extendingクラスがあります(クロスプロセス)。それを実現するために、私はファイルロックを使おうとしています。これが私のコードの一部です:
class Scanner(Thread):
def __init__(self, path):
Thread.__init__(self)
self.lock_file = open(os.path.join(config.BASEDIR, "scanner.lock"), 'r+')
fcntl.lockf(self.lock_file, fcntl.LOCK_EX | fcntl.LOCK_NB)
# Stuff omitted
def run(self):
logging.info("Starting scan on %s" % self.path)
# More stuff omitted
fcntl.lockf(self.lock_file, fcntl.LOCK_UN)
スレッドがすでに実行されていて、オブジェクトをまったく初期化していないlockf
場合、呼び出しが例外をスローすることを期待していました。Scanner
しかし、私はこれをターミナルで見ることができます:
INFO:root:Starting scan on /home/felix/Music
INFO:root:Starting scan on /home/felix/Music
INFO:root:Scan finished
INFO:root:Scan finished
これは、2つのScanner
スレッドが同時に実行されており、例外がスローされていないことを示しています。ここでは本当に基本的なものが欠けていると思いますが、それが何であるか理解できないようです。誰か助けてもらえますか?