Python Threading вызывает метод несколько раз - PullRequest
0 голосов
/ 03 июня 2018

Мне нужно свернуть веб-сайт и отобразить сообщение, если статус заголовка не равен 200. Логика работает нормально, но я сталкиваюсь с проблемой при вызове метода один раз.

Threading.Time должен вызывать метод ONCE каждые 20 секунд, но, очевидно, он вызывает его несколько раз.Может кто-нибудь сказать, пожалуйста, как я могу заставить его вызывать метод каждые 20 секунд ?

import requests
import threading
def check_status(url):
  while True:
    status = requests.get(url)
    if status.status_code != 200:
       print('faulty')

def main():
  threading.Timer(2.0, check_status, args=('https://www.google.com',)).start()

if __name__ == "__main__":
  main()

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Просто создайте новый таймер после завершения старого.

import requests
import threading

def check_status(url): 
    status = requests.get(url)
    if status.status_code != 200:
        print('faulty')
    threading.Timer(2.0, check_status, args=('https://www.google.com',)).start()


def main():
    threading.Timer(2.0, check_status, args=('https://www.google.com',)).start()

if __name__ == "__main__":
  main()
0 голосов
/ 03 июня 2018

Каждые 20 секунд вы создаете поток, который входит в бесконечный цикл, который проверяет статус HTTP.Даже если вы не используете threading.Time, вы все равно получите несколько отпечатков.Удалите цикл while, и он будет работать так, как вы ожидаете.

Обновление

Моя ошибка при просмотре документации: https://docs.python.org/2/library/threading.html#timer-objects

Time выполнит функцию по истечении времени.Тогда это выйдет.То, что вам нужно сделать, это включить в цикл while time.sleep и вызвать функцию только один раз внутри вашего main.

...