#python-3.x #python-asyncio #python-multithreading
#python-3.x #python-asyncio #python-многопоточность
Вопрос:
Я создаю несколько потоков для выполнения функции, которая генерирует 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
...
Моя проблема в том, что я не могу реализовать событие для прерывания потоков без зацикливания для регулярной проверки события.
Есть ли какой-либо другой способ остановить все эти потоки?
Или, если я все еще буду использовать событие, есть ли какая-либо другая логика для его реализации?
Заранее спасибо!
Комментарии:
1. Даже функция без цикла может реализовывать случайные проверки флага. Что делает функция, когда установлено событие остановки?
2. @user4815162342, да, но проблема в том, что когда я нажимаю кнопку stop, мне нужно немедленно остановить процесс. Однако, поскольку это функция без цикла, мне нужно реализовать событие остановки несколько раз. Я все еще не знаю, как реализовать событие остановки для функции.
3. Но в чем проблема с добавлением проверок в функцию без цикла? Я не думаю, что существует волшебный способ, чтобы проверка происходила сама по себе, вы должны его реализовать…
4. @user4815162342 эта функция также вызывает другие функции, которые выполняют большие задачи. Если, например, я добавлю средство проверки с самого начала и в конце этой функции, оно все равно выполнит процесс перед проверкой события. Мы в одной лодке? Ха-ха!
5. Да, вам нужно добавить проверку ко всем функциям.