28 lines
		
	
	
		
			617 B
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			617 B
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| Interprocess mutex based on file locks
 | |
| """
 | |
| 
 | |
| import fcntl
 | |
| import os
 | |
| 
 | |
| class Lock:
 | |
| 
 | |
|     def __init__(self, filename):
 | |
|         self.filename = filename
 | |
|         # This will create it if it does not exist already
 | |
|         unbuffered = 0
 | |
|         self.handle = open(filename, 'a+', unbuffered)
 | |
| 
 | |
|     def acquire(self):
 | |
|         fcntl.flock(self.handle, fcntl.LOCK_EX)
 | |
| 
 | |
|     # will throw IOError if unavailable
 | |
|     def try_acquire(self):
 | |
|         fcntl.flock(self.handle, fcntl.LOCK_NB | fcntl.LOCK_EX)
 | |
| 
 | |
|     def release(self):
 | |
|         fcntl.flock(self.handle, fcntl.LOCK_UN)
 | |
| 
 | |
|     def __del__(self):
 | |
|         self.handle.close()
 |