Существует два способа обработки асинхронных событий в программировании.
Один из способов - использовать прерывания: у вас есть код, который не выполняется до тех пор, пока «не разбудит» какой-то механизм, и затем он выполнится.Этот механизм должен поддерживаться на более низком уровне, чем там, где выполняется ваш код.Например, в микроконтроллеры встроено специальное аппаратное обеспечение, которое может прерывать приложение и переходить по определенному адресу, чтобы начать выполнение инструкций для обработки прерывания.
Построение системы прерываний является сложным процессом и требует значительных затрат.объем работы.Для некоторых приложений это просто невозможно.Почти всегда легче (хотя и менее эффективно) опрашивать или проверять условие несколько раз, пока оно не станет Истиной, а затем выполнить что-то еще.
В вашем примере обратите внимание, как он использует цикл while True:
.True никогда не будет False, поэтому цикл while может быть прерван только оператором break
.Мы находим этот оператор break в
if session.exit_status_ready():
break
Так что автор этого кода решил что-то делать непрерывно, пока session.exit_status_ready()
не станет True.Поскольку это paramiko, вполне вероятно, что он выполнил удаленную команду через SSH и ожидает, пока команда завершит работу и вернет код выхода.Смысл этого цикла состоит в том, чтобы держать программу в цикле, пока команда не завершит выполнение и не вернет результат.Время ожидания также может составлять:
if et_secs > maxseconds:
self.info('polling finished - timeout')
timeout_flag = True
break
Поэтому, если команда занимает более maxseconds
, программа не будет сидеть и ждать вечно.
Как только она выйдет из цикла, она напечатает:
self.info('polling loop ended')
Поэтому, когда вы видите это сообщение, вы знаете, что удаленная команда завершила выполнение или истекло время ожидания.
Точка опроса заключается в повторной проверке чего-либо до появления определенного условия.В вашем случае это условие «удаленная команда завершила выполнение» или «прошло определенное время».