В ответе ChadZ ответом является метрика c распознавателя форм, о котором я говорю Метрики распознавателя форм . В нашем тесте мы проверяем каталог на наличие файлов и последовательно анализируем их, ожидаем каждого ответа, записываем результаты, получаем следующий файл и так далее. Нет многопоточности.
Посмотрите на самый большой всплеск 14 апреля с 15330 звонками. Если предположить, что каждый вызов 14 апреля занимал 10 секунд (что было бы быстро, обычно это может занимать до минуты), то анализ занимал 153300 секунд, что составляет 2555 минут или 42,58 часа. Даже если анализ займет всего 5 секунд, что будет более 20 часов.
Конечно, я могу ошибаться, но в настоящее время лучшим логическим объяснением будет то, что также запросы на получение отслеживаются и выставляются счета.
Исходное сообщение
Я использую собственную модель с метками (созданную с помощью инструмента маркировки образцов) и получаю результаты с помощью "Python Распознаватель форм Asyn c Analyze" V2 Код SDK снизу этой этой страницы. Хотя asyn c в V2 намного медленнее, чем V1 (который я описал здесь ), он также кажется намного, намного дороже.
Исходный пример кода, чтобы получить результат после вызов post api выглядит следующим образом:
n_tries = 15
n_try = 0
wait_sec = 5
max_wait_sec = 60
while n_try < n_tries:
try:
resp = get(url = get_url, headers = {"Ocp-Apim-Subscription-Key": apim_key})
resp_json = resp.json()
if resp.status_code != 200:
print("GET analyze results failed:\n%s" % json.dumps(resp_json))
quit()
status = resp_json["status"]
if status == "succeeded":
print("Analysis succeeded:\n%s" % json.dumps(resp_json))
quit()
if status == "failed":
print("Analysis failed:\n%s" % json.dumps(resp_json))
quit()
# Analysis still running. Wait and retry.
time.sleep(wait_sec)
n_try += 1
wait_sec = min(2*wait_sec, max_wait_sec)
except Exception as e:
msg = "GET analyze results failed:\n%s" % str(e)
print(msg)
quit()
print("Analyze operation did not complete within the allocated time.")
Как вы можете видеть в исходном примере кода, он каждые 5 секунд смотрит на результат.
Моя проблема: мне кажется, что оплачивается не только вызов API для анализа документа, но и каждый запрос get для получения результатов.
Наш счет в десять раз больше с помощью V2. В настоящее время мы находимся в стадии тестирования, и мы обычно получаем около 400-500 документов в месяц, которые правильно отслеживались и выставлялись в V1. С V2 и приведенным выше примером кода у нас теперь есть 63690 (!!!!!) вызовов, каждый вызов оплачивается, расходы растут.
Кто-нибудь может подтвердить это поведение?
Лично я ' Я хотел бы вернуть операцию syn c, где ответ на вызов API также содержит результат анализа любого документа.
try:
url = base_url + "/models/" + model_id + "/analyze"
with open(filepath, "rb") as f:
data_bytes = f.read()
response = requests.post(url=url, data=data_bytes, headers=headers)
return response.json()
except Exception as e:
print(str(e))
return None
к сожалению, это больше не работает .....
try:
response = requests.post(url=post_url, data=data_bytes, headers=headers) # , params=params)
if response.status_code != 202:
return None
# Success
get_url = response.headers["operation-location"]
return form_recognizerv2_getdata(get_url, subscription_key)
except Exception as e:
print("POST analyze failed:\n%s" % str(e))
return None