Как остановить запуск цикла в исполнителе? - PullRequest
0 голосов
/ 26 марта 2019

Я запускаю функцию, которая требует времени, чтобы закончить. У пользователя есть выбор, чтобы остановить эту функцию / событие. Есть ли простой способ остановить поток или цикл?

class ThreadsGenerator:
    MAX_WORKERS = 5

    def __init__(self):
        self._executor = ThreadPoolExecutor(max_workers=self.MAX_WORKERS)
        self.loop = None
        self.future = None

    def execute_function(self, function_to_execute, *args):
        self.loop = asyncio.get_event_loop()
        self.future = self.loop.run_in_executor(self._executor, function_to_execute, *args)

        return self.future

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

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

1 Ответ

4 голосов
/ 26 марта 2019

Есть ли простой способ остановить поток или цикл?

Вы не можете принудительно остановить поток. Для реализации функции отмены вашей функции потребуется принять аргумент should_stop, например, экземпляр threading.Event, и иногда проверять, был ли он установлен.

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

...