Mam wątek, który uruchomiłem (kod poniżej), który uruchamia podproces blokujący. Aby upewnić się, że inne wątki nie uruchamiają tego samego podprocesu, mam blokadę wokół tego połączenia subprocess.call
. Chcę również móc zakończyć to wywołanie podprocesu, więc mam funkcję stop, którą wywołuję z innego miejsca. W przypadku, gdy podproces jest zatrzymany przedwcześnie, chcę, aby zwolnić blokadę, a także, co jest, co poniżej kodu:Zapytanie, czy wątek w Pythonie jest blokowany. Blokada jest zablokowana lub nie.
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()
Jednakże, zgodnie z dokumentacją here, nazywając release()
na zwolnionym blokady podniesie wyjątek:
A RuntimeError is raised if this method is called when the lock is unlocked.
Czy istnieje funkcja zapytań jak aLock.isLocked()
?
To jak początek ... musimy iść głębiej – puk