Таким образом, в настоящее время я запускаю пакетные задания, которые отправляют эхо-запросы API, и я сохраняю номера идентификаторов поиска для заданий, которые запускаю в списке (например, searches_to_process = [ ... ]
).
Что я хотел бы выполнить, так этовыполнять итерацию по этому списку непрерывно, пока я проверяю состояние определенной работы, используя мой API, и если и только если он помечен как завершенный, я хотел бы обработать его, а затем, после получения результатов, удалить его из моего списка.
Я не уверен, как бы я структурировал свой цикл или программу, чтобы он одновременно проверял все элементы в списке и не зависал в ожидании определенного результата.
Так что вПо сути, поток будет выглядеть примерно так:
Check API if job is done -> If yes, obtain result and remove the id from list.
-> If no then it should move to next item and just come back to it later.
Одна проблема, с которой я зацикливаюсь, это то, что я думаю, что я должен использовать цикл while
, но в этомесли я не думаю, что могу знать, какую работу я сейчас проверяю и используя цикл for
, он будет повторяться по всему только один раз.
Итак, как мне обойти это (возможное) препятствие?
Приложение:
Пинг для статуса задания:
status = requests.get(url + '/services/search/jobs/' + search_id.text,
headers=headers,
verify=False)
, который возвращает некоторый XML, который затем обрабатывается, чтобы найти требуемое значение: <s:key name="isDone">1</s:key>
(т.е. я смогу получить двоичный файл1 или 0 в качестве возвращаемого значения, обработка XML не вызывает проблем.)
Структура (и) данных - это в основном список строк, которые добавляются к URL-адресу API, например, id_1_2_3_4
get добавляетсяи становится: https://www.website.com/services/search/jobs/id_1_2_3_4
, для которого я могу получить ответ XML (или JSON) и получить статус задания.
После подтверждения статуса я могу просто снова пропинговать API, но добавить /results
к URL, чтобы получить готовые результаты.