1 from fcntl import flock, LOCK_EX, LOCK_UN, LOCK_NB
2 from os import path, remove
6 lock_fname = path.join(
7 path.dirname(path.dirname(path.dirname(__file__))),
8 'tmp', 'm_librarian.lock')
13 lock_file = open(lock_fname, 'r')
14 except IOError: # no lock file
18 flock(lock_file, LOCK_EX | LOCK_NB)
19 except IOError: # locked
20 port = int(lock_file.readline())
24 flock(lock_file, LOCK_UN)
27 lock_file = open(lock_fname, 'w')
28 lock_file.write(str(port))
30 lock_file = open(lock_fname, 'r')
31 flock(lock_file, LOCK_EX | LOCK_NB)
32 return lock_file, None
35 def close_lock(lock_file):
36 flock(lock_file, LOCK_UN)
38 lock_file = open(lock_fname, 'w')
45 # https://stackoverflow.com/a/2838309/7976758
46 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
49 port = s.getsockname()[1]