Остановите все потоки, используя threading.Event () - PullRequest
0 голосов
/ 27 марта 2019

Я создаю несколько потоков для выполнения функции, которая генерирует PDF. Этот процесс занимает много времени, поэтому у пользователя есть выбор отменить выполнение.

Чтобы остановить поток, я знаю, что могу использовать threading.Event(), чтобы проверить, будет ли он установлен. Тем не менее, процесс функции, которую я выполняю в моем цикле событий, является прямым / линейным (нет цикла, чтобы регулярно проверять, установлено ли событие).

--threading class--

    def execute_function(self, function_to_execute, total_executions, execution_time, controller):
        self.event = threading.Event()
        self.event_list.append(self.event)
        self.loop = asyncio.get_event_loop()
        self.future = self.loop.run_in_executor(self._executor, function_to_execute, self.event, total_executions,
                                                execution_time, controller)


    def stop_executor(self):
        for event in self.event_list:
            event.set()
        self.event = None

        if self._executor:
            self._executor.shutdown(wait=False)
    def *function_to_execute*(self, event, total_execution, seconds=SECONDS_DEFAULT, controller=None):
        self.event = event
        self.controller = controller
        ...


Моя проблема в том, что я не могу реализовать Событие, чтобы прерывать потоки без циклов для регулярной проверки События. Есть ли другой способ остановить все эти темы? Или, если я все еще буду использовать Событие, есть ли другая логика для его реализации?

Заранее спасибо!

...