Есть две копии программы на Python, используют один функционал на двоих. Доступ получают поочередно, точнее должны получать. На данный момент использовал вариант с созданием файла в качестве метки блокировки, но все равно иногда проскакивает одновременный доступ. Все возможные ошибки исключил, проблема в самой блокировке. Возможно, есть модули для python+win получше portalocker? Или какие-то другие идеи.
class ML():
def __init__(self):
self.mk = 0
self.fn = 'lock\\mark'
def __enter__(self):
os.chdir(os.path.dirname(os.__file__))
while 1:
try:
os.rename(self.fn,self.fn)
self.mk = open(self.fn,'w')
portalocker.lock(self.mk, portalocker.LOCK_EX)
print 'LOCK>>>>>'
break
except:
pass
def __exit__(self, type, value, traceback):
while 1:
try:
self.mk.close()
print '<<<<<RELEASE'
break
except:
pass