例:
test.py
class test_class(object):
def display(self):
print "Hello"
lock1.py
from test import test_class
from time import sleep
obj = test_class()
while True:
obj.display()
sleep(1)
lock2.py
from test import test_class
obj = test_class()
# Raise error if instance of test_class has been implemented before
try:
obj.display()
except Exception as e:
print e
私がする必要があるのは、ファイルlock2.pyのクラス(またはtest.py全体)をロック(または何か)することです.Error(またはExpeption)を発生させる前にオブジェクトがそのクラスに対してすでに初期化されている場合 例は関連性がないように見えるかもしれませんが、例を単純化しました。
ファイル、つまりtest.pyを使用してロックしようとしました
http://packages.python.org/lockfile/lockfile.html
http://pypi.python.org/pypi/zc.lockfile
しかし、それは役に立たないようです。
これが実際のコードスニペットです
comm_port.py
import serial
class CommPort(object):
def __init__(self):
self.ser = serial.Serial("/dev/ttyUSB0")
# update in db (I've removed actual db update process
# db.flag = 1
access_file1.py
from comm_port import CommPort
# if db.flag != 1:
port = Commport()
port.ser.flushInput()
port.ser.flushOutput()
## will flush the buffer.. what if it flused the data that was supposed for go for accessing_file2
port.ser.write("1")
# do stuff using serial-port object "port"
# lets say script gets busy for 30 secs for doing some stuffs
# db.flag = 0
access_file2.py
from comm_port import CommPort
# if db.flag != 1:
port = Commport()
port.ser.flushInput()
port.ser.flushOutput()
port.ser.write("2")
# do stuff using serial-port object "port"
# lets say script gets busy for 40 secs for doing some stuffs
# db.flag = 0
それでも例は関連性がないように見えるかもしれませんが、これは私の場合です。両方のファイルを一度にアクティブ化することもできますが、一度に操作する必要があるのは 1 つだけです。私がしたことは、comm_port.py が使用され、残りのファイルがこのフラグをチェックする場合に db フラグを作成することでした。comm_port がビジー状態の場合、他のアクセス ファイルは機能しません。しかし、私はそれがベストプラクティスだとは思いません。
したがって、CommPort クラスが任意のオブジェクトによって開始されているかどうか、または comm_port.py をロックするかどうかを確認する方法があるかどうかを確認する必要があります。または、他の既存のアイデアが大歓迎です。