我正在运行一个线程(下面是代码),它会启动一个阻塞的子进程。为了确保其他线程不会启动相同的子进程,我在这个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()
的查询函数?
locked()
函数呢? - ChickenFeetlocked() 如果已获取锁,则返回true。
- porgullthreading.lock
和multiprocessing.lock
不同, 在multiprocessing.lock
中没有locked()
方法。 - PersianMan