У меня есть поток, который я запускаю (код ниже), который запускает блокирующий подпроцесс. Чтобы другие потоки не запускали один и тот же подпроцесс, у меня есть блокировка этого вызова 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()
?