Http запросы к API исполняются больше 20 секунд
У меня есть приложение на django, которое может искать видео на YouTube через YouTube Data API v3 и переводить их описание с помощью Yandex Translate API. Зачастую все работает прекрасно, оба сервиса нормально отвечают. Но примерно раз в 10 вызовов, запрос растягивается секунд на 20. И с переводом и с ютубом такое.
В консоли разработчика смотрю, в графе "Ожидание (Время получения первого байта)" как раз эти 20 секунд и есть. Не понимаю, почему так, вряд ли проблема на стороне сервисов, она ведь на обоих наблюдается. Но никак не могу понять, в чем у меня тогда проблема...
Я пробовал DEBUG поставить на False, где-то советовали. Но проблема не ушла.
Код функций получения данных с YouTube:
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import os
import pickle
SCOPES = ["https://www.googleapis.com/auth/youtube.force-ssl"]
def auth():
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
api_service_name = "youtube"
api_version = "v3"
credentials_filename = "credentials.json"
credentials = None
if os.path.exists("token.pickle"):
with open("token.pickle", "rb") as token:
credentials = pickle.load(token)
if not credentials or not credentials.valid:
if credentials and credentials.expired and credentials.refresh_token:
credentials.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(credentials_filename, SCOPES)
credentials = flow.run_local_server(port=8000)
with open("token.pickle", "wb") as token:
pickle.dump(credentials, token)
return build(api_service_name, api_version, credentials=credentials)
def search(youtube, **kwargs):
return youtube.search().list(part="snippet", **kwargs).execute()
Код их вызова:
yt = auth()
response = search(yt, q=request.POST['search'], maxResults=20, type='video')['items']
Код функции для Yandex API:
endpoint_url = 'https://translate.api.cloud.yandex.net/translate/v2/translate'
list_texts = [str(texts[key]) for key in texts]
body = {
"targetLanguageCode": language,
"texts": list_texts,
"folderId": self.folder_id,
}
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer {0}".format(self.token)
}
response = requests.post(endpoint_url, json=body, headers=headers)