Python: как предусмотреть прерывание цикла до его нормального завершения - PullRequest
0 голосов
/ 30 ноября 2018

У меня цикл работает довольно долго (несколько часов).Может случиться так, что пользователь, просматривая текущие результаты, считает итерации выполнения достаточными, а затем хочет остановить цикл до его естественного завершения, но без прерывания всей программы (без «Ctrl + C»), так как некоторая обработка окончательных результатовявляется необходимым.

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

Пример

i = 0
while i < 1000 and not(path.isfile(path.join(self.wrkdir,'stop'))) :
    DoSomeStuff
    i += 1

FinalizingStuff

1 Ответ

0 голосов
/ 30 ноября 2018

Если единственная причина, по которой вы не используете Ctrl+C, заключается в том, что вы думаете, что она остановит все вашей программы, тогда лучшим решением будет использовать ее вместо просмотра файлов.

Просто потому, что вы можете catch это исключение (оно называется KeyboardInterrupt) в вашем коде, как и любое другое, и делать все, что вы хотите.

import time

try:
    while True:
        time.sleep(0.1)

except KeyboardInterrupt:
    print('Ok, user is pissed with our loop, go further')

finally:   
    # if some resources need to be cleaned
    pass    

print('Here we are, nothing is lost')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...