Python Thread.join никогда не происходит после убийства подпроцесса сценарияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python Thread.join никогда не происходит после убийства подпроцесса сценария

Сообщение Anonymous »

У меня есть графический интерфейс Tk с кнопками запуска и отмены.
Кнопка запуска запускает поток, который порождает подпроцесс и ожидает ответа, чтобы обновить графический интерфейс. >
Кнопка отмены уничтожает порожденный подпроцесс.
Поток зависает, когда я пытаюсь присоединиться. Я не уверен, почему вызов соединения ожидает бесконечно, поскольку подпроцесс завершается и его значение выхода доступно.
Документация по адресу (https://docs.python.org/3/ библиотека/subprocess.html#subprocess.Popen.wait) не очень хороша — я знаю, что там написано «ожидает завершения процесса», но сценарий использует утилиту, которая, кажется, улавливает и игнорирует это, поэтому мне нужно использовать kill. Я знаю, что следующий код упрощен, но я убиваю все дочерние процессы порожденного сценария.
Если кто-нибудь знает, что я сделал неправильно или что я не делаю, пожалуйста, дайте мне знать
class MyGUIClass

def __init__(self):
self.my_worker = MyWorkerClass()

def on_start_button():
self.worker_thread=Thread(target=self.start_process)
self.worker_thread.start()

def start_process(self):
result = self.my_worker.run_script()
self.update_gui(result) # Only gets here if not cancelled

def on_cancel_button():
self.my_worker.stop_script()
self.worker_thread.join() # Seems to hang here
print('Never happens')

def update_gui(self, result):
# do something pretty

class MyWorkerClass

def run_script(self):
self.script_proc = subprocess.Popen(['script-to-be-run.bat'])
self.script_proc.wait()
return(self.script_proc.returncode == 0)

def stop_script(self):
self.script_proc.kill()
print(f'PID {self.script_proc.pid} returned {self.script_proc.returncode}')


Подробнее здесь: https://stackoverflow.com/questions/792 ... for-script
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»