2012-01-11 89 views
1

是否有任何用于Python的锁定接口,当进程死亡时会自动打开锁?我的印象是sysv ipc允许这样做,但我仍然试图弄清楚细节。当进程死亡时会消失的Python锁

我从接口有什么期望:

  • 锁定/解除功能
  • Linux上的不同进程之间的工作
  • 自动解锁当进程持有锁死亡
  • 强制锁定打破超时(不需要)

回答

1

您可以使用将锁应用于文件210或fcntl.flock。这似乎符合你的所有标准。或者,您是否需要每次要锁定或解锁时都不需要系统调用的内容?

+0

不,系统调用就好:) – viraptor 2012-01-11 17:34:35

0

我通常使用try ... finally块来释放一个锁。 例如

try: 
    #do stuff 
except Exception: 
    pass 
finally: 
    #release lock 
0

你可以尝试在建multiprocessingLock对象。我不知道是否一个进程垃圾回收时,门锁会自动解锁,但你总是可以继承multiprocessing.Process这样的:

class MyProc(multiprocessing.Process): 
    def __init__(self): 
     self.ipc_lock = multiprocessing.Lock() 
     # ... 
     return 
    def __del__(self): 
     self.ipc_lock.release() 
     return 

,如果你需要解锁如果有异常被触发,然后放进了(重写)run方法。