Определить, если внешний вызов занимает много времени в Python - PullRequest
1 голос
/ 04 января 2012

В моем скрипте Python я выполняю внешний вызов с использованием subprocess.Popen ().Если звонок не вернулся в течение x секунд, мне нужно отправить электронное письмо с указанием, что что-то не так.Как я могу ограничить время выполнения внешнего звонка?Обратите внимание, что я не заинтересован в завершении вызова, просто обнаружив, что это занимает слишком много времени.

Ответы [ 3 ]

1 голос
/ 04 января 2012

Для этого объекта подпроцесса poll.См. http://docs.python.org/library/subprocess.html#subprocess.Popen.poll

. Вы можете использовать time.sleep() для ожидания интервала ожидания.Затем poll объект подпроцесса, чтобы увидеть, если это сделано.

Если это сделано, это хорошо.

Если это не сделано, ваше приложение отправляет электронное письмо.

0 голосов
/ 04 января 2012

Вы можете использовать режим сна и проверить, активен ли подпроцесс следующим образом:

из многопроцессорного процесса импорта

checker = Process(target=yourFunction, args=(some_queue))
timeout = 150
checker.start()
counter = 0
while checker.is_alive() == True:
        time.sleep(1)
        counter += 1
        if counter > timeout :
                print "Child process consumed too much run-time."
                break
0 голосов
/ 04 января 2012

Для этого вы можете использовать сигналы:

 signal.alarm(time)

из http://docs.python.org/library/signal.html

взяты из документов Python:

  import signal, os

  def handler(signum, frame):
     print 'Signal handler called with signal', signum
     raise IOError("Couldn't open device!")

  # Set the signal handler and a 5-second alarm
  signal.signal(signal.SIGALRM, handler)
  signal.alarm(5)

  # This open() may hang indefinitely
  fd = os.open('/dev/ttyS0', os.O_RDWR)

  signal.alarm(0)          # Disable the alarm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...