我有一个正在运行的线程(下面的代码),它启动一个阻塞子进程。为了确保其他线程不会启动相同的子进程,我对该subprocess.call
调用进行了锁定。我还希望能够终止这个子进程调用,所以我有一个从其他地方调用的停止函数。如果子进程过早停止,我也想释放锁,这就是以下代码的作用:
class SomeThread(threading.Thread):
def run(self):
aLock.acquire()
self.clip = subprocess.call([ 'mplayer', 'Avatar.h264'], stdin=subprocess.PIPE)
aLock.release()
def stop(self):
if self.clip != None and self.clip.poll() == True:
try:
self.clip.send_signal(signal.SIGINT)
except:
pass
aLock.release()
但是,根据此处的文档,调用release()
已释放的锁将引发异常:
A RuntimeError is raised if this method is called when the lock is unlocked.
有没有类似的查询功能aLock.isLocked()
?