Я создаю несколько потоков для выполнения функции, которая генерирует 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
...
Моя проблема в том, что я не могу реализовать Событие, чтобы прерывать потоки без циклов для регулярной проверки События.
Есть ли другой способ остановить все эти темы?
Или, если я все еще буду использовать Событие, есть ли другая логика для его реализации?
Заранее спасибо!