Как мне получить получение API там, где оно остановилось после истечения времени ожидания запроса

#python #api #soap

#python #API #soap

Вопрос:

Я все еще работаю над этим коктейльным приложением и столкнулся с другой проблемой. Через некоторое время вызов api прекратится через час; api будет оставаться открытым только в течение часа. По истечении этого часа я должен выполнить новый вызов api. Но я не хочу начинать все сначала, пытаясь восстановить данные. Данные, которые я использую, содержат более 300 тысяч записей для сопоставления, что в среднем занимает около 10 часов. Извините, если этот вопрос не имеет никакого смысла, я все еще новичок в программировании и делаю все, что в моих силах!

Например:

  1. Выполнить вызов api
  2. Используйте данные из 300k записей csv-файла для восстановления данных
  3. Извлеките данные обратно.
  4. Разрыв соединения с API — потребуется установить новое соединение с api.
  5. Выполнить вызов API
  6. Определите, какие данные были сопоставлены из CSV-файла, затем выберите из следующей записи те, которые не были сопоставлены.

Есть ли способ убедиться, что, когда мне нужно получить новый ключ API или когда соединение прерывается, всякий раз, когда соединение устанавливается снова, оно возобновляется с того места, где оно было прервано?

Комментарии:

1. Не уверен, что вы подразумеваете под «восстановить данные» или «Восстановить данные», или даже под «Определить, какие данные были сопоставлены». Я не могу сказать, что происходит на клиенте по сравнению с сервером. В любом случае, если поиск по 300 тыс. записей занимает 10 часов — не так уж много, — тогда архитектура приложения оставляет желать лучшего. Разве это не должно занять больше секунды или двух?

2. @Ной, вот что я подумал… Когда я говорю: «верните данные», я имею в виду, что когда он найдет совпадение, он вернет совпадающие данные для той конкретной строки, которая была передана. Я не знаю, что происходит с сервером, но он просто падает через час. Итак, через час я должен переподключиться и попытаться найти, где последнее совпадение было получено от API, а затем начать свой цикл со следующей строки. Как мне заставить api продолжить с того места, на котором он остановился?

Ответ №1:

Похоже, вы хотите, чтобы в вашем API было что-то вроде «сеансов», к которым клиент может отключаться и повторно подключаться.

Просто какой-то идентификатор сеанса, который сервер может использовать для повторного подключения вас к любому длительному запросу, который он выполняет.

Хотя, вероятно, это становится довольно сложным. Запрос может завершиться, когда ни один клиент не подключен, и поэтому результаты должны быть сохранены где-то с помощью идентификатора сеанса, чтобы при повторном подключении API он мог получить результаты.

PS. 10 часов для сопоставления 300 Тыс. записей? Это сумасшедшее количество времени! Я бы сделал некоторое профилирование для этого алгоритма сопоставления.

Комментарии:

1. Я сохраняю результаты в списке. Как мне создать этот сеанс для этого?

2. Без (много) более подробной информации трудно помочь дальше. Я был бы склонен хранить результаты в базе данных, индексированной по идентификатору сеанса, но тогда вам также необходимо учитывать безопасность — что мешает пользователю B получать результаты пользователя A, просто перехватывая идентификатор сеанса.

3. Извините, я полностью пропустил это. Сколько деталей вам нужно? Сервер, к которому я подключаюсь, продолжает вылетать.