Http API запросы выполняются более 20 секунд
У меня есть приложение на django, которое может искать видео на YouTube через YouTube Data API v3 и переводить их описание с помощью Yandex Translate API. Часто все работает хорошо, оба сервиса отвечают нормально. Но примерно раз в 10 обращений запрос растягивается примерно на 20 секунд. Это происходит и с переводом, и с YouTube.
Смотрю в консоли разработчика, в графе "Ожидание (Время получения первого байта)" как раз эти 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)