Перезапуск функции python

Есть проблема. Как мне перезапустить функцию function1_request?

import requests
from bs4 import BeautifulSoup as BS
import time

def function1_request(url):
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
    }
    ret_url = requests.get(url, HEADERS)
    ret_url1 = str(ret_url)
    voz_normal = ret_url1.find('200')
    voz_rate_limit = ret_url1.find('429')
    if voz_normal != -1:
        return ret_url
    elif voz_rate_limit == -1:
        print('fawwfa')
        time.sleep(600)
        #здесь нужно начать функцию заново
    else:
        print('Ошибка в распознавании')
        exit()

Ответы (2 шт):

Автор решения: gil9red

Добавил пример зацикливания, сделал рефакторинг

Алгоритм:

  • Функция повторяет вызов и если результат успешный (200), то сразу выполняется выход из функции
  • Если результат 429 Too Many Requests, то засыпаем на 10 минут и на следующей итерации повторим запрос
  • Если в результате что-то другое, то выходим из функции, возвращая None

Пример:

import requests
from bs4 import BeautifulSoup as BS
import time

def function1_request(url):
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
    }
    while True:
        rs = requests.get(url, HEADERS)        
        if rs.status_code == 200:
            return rs
        elif rs.status_code == 429:
            print('fawwfa')
            time.sleep(600)
        else:
            print('Ошибка в распознавании')
            return


url = ...
rs = function1_request(url)
if not rs:
    exit()
    
print(rs)
→ Ссылка
Автор решения: VeySheng

А можно вот так вот?

import requests
from bs4 import BeautifulSoup as BS
import time

def function1_request(url):
    HEADERS = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 YaBrowser/21.2.3.100 Yowser/2.5 Safari/537.36'
    }
    ret_url = requests.get(url, HEADERS)
    ret_url1 = str(ret_url)
    voz_normal = ret_url1.find('200')
    voz_rate_limit = ret_url1.find('429')
    if voz_normal != -1:
        #print('Работает')
        return ret_url
    elif voz_rate_limit != -1:
        print('Поймал временный бан из-за запросов')
        time.sleep(600)
        return function1_request(url)
    else:
        print('Ошибка в распознавании')
        print(ret_url)
        exit()
→ Ссылка