Есть ли способ написать команду, чтобы она прервала выполнение запущенной функции? - PullRequest
1 голос
/ 01 сентября 2010

У меня есть виджет, который измеряет прошедшее время, затем через определенное время он выполняет команду. Однако, если виджет оставлен, я хочу, чтобы он прервал вызов этой функции и не выполнял команду.

Как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 01 сентября 2010

Используйте модуль threading и запустите новый поток, который запустит функцию.

Просто прервать функцию - плохая идея, так как вы не знаете, прерываете ли вы поток в критической ситуации. Вы должны расширить свою функцию следующим образом:

import threading

class WidgetThread(threading.Thread):
     def __init__(self):
         threading.Thread.__init__(self)
         self._stop = False

     def run(self):
        # ... do some time-intensive stuff that stops if self._stop ...
        #
        # Example:
        #  while not self._stop:
        #      do_somthing()

     def stop(self):
         self._stop = True



# Start the thread and make it run the function:

thread = WidgetThread()
thread.start()

# If you want to abort it:

thread.stop()
0 голосов
/ 01 сентября 2010

Понятия не имеем о потоках Python, но в целом способ прерывания потока заключается в том, чтобы иметь какой-то потокобезопасный объект состояния, который вы можете установить из виджета, и логику в коде потока для проверки изменения объекта состояния значение и разрыв из цикла потока.

0 голосов
/ 01 сентября 2010

Почему бы не использовать потоки и остановить это?Я не думаю, что возможно перехватить вызов функции в однопоточной программе (если не с каким-то сигналом или прерыванием).

Кроме того, с вашей конкретной проблемой, вы можете ввести флаг ипроверьте это в команде.

...