diff --git a/nava/thread.py b/nava/thread.py index 440e85d..7329fb8 100644 --- a/nava/thread.py +++ b/nava/thread.py @@ -28,6 +28,27 @@ def __init__(self, loop, engine, *args, **kwargs): self._engine = engine self._nava_exception = None + def _kill_play_process(self, wait=True): + """ + Kill play process. + + :param wait: wait flag + :type wait: bool + :return: None + """ + if self._play_process is not None: + try: + self._play_process.stdout.close() + self._play_process.stdin.close() + self._play_process.stderr.close() + self._play_process.kill() + self._play_process.terminate() + except ProcessLookupError: + pass + finally: + if wait: + self._play_process.wait() + def run(self): """ Run target function. @@ -46,6 +67,7 @@ def run(self): break except Exception: # pragma: no cover self._nava_exception = SOUND_FILE_PLAY_ERROR + self._kill_play_process(wait=False) raise NavaBaseError(SOUND_FILE_PLAY_ERROR) def stop(self): @@ -59,14 +81,4 @@ def stop(self): import winsound winsound.PlaySound(None, winsound.SND_PURGE) else: - if self._play_process is not None: - try: - self._play_process.stdout.close() - self._play_process.stdin.close() - self._play_process.stderr.close() - self._play_process.kill() - self._play_process.terminate() - except ProcessLookupError: - pass - finally: - self._play_process.wait() + self._kill_play_process()