leshchenko1979 / fast_bitrix24

Высокопроизводительный API wrapper для Питона для быстрого массового обмена данными с Битрикс24 через REST API
MIT License
151 stars 31 forks source link

Соблюдение новых ограничений на длительность запросов #187

Closed Helow19274 closed 7 months ago

Helow19274 commented 2 years ago

Совсем недавно в облачной версии Б24 добавили новые лимиты запросов: https://helpdesk.bitrix24.ru/open/15959788 Сейчас это никак не отслеживается библиотекой, даже если установить respect_velocity_policy на True

leshchenko1979 commented 2 years ago

Спасибо! Вам сейчас это сильно мешает?

Helow19274 commented 2 years ago

Нет, сейчас не мешает, но если вы это добавите, будет полезно) Пока что у нас не так много ёмких запросов

leshchenko1979 commented 2 years ago

Разработчики пишут, что отказы из-за описанного лимита возникают крайне редко: https://t.me/bitrix24apps/14038

Helow19274 commented 2 years ago

У нас эта ошибка сыпалась регулярно один день через пару дней после добавления ограничений, потом почти ни разу не было. Очень странно как-то, объём запросов не менялся

Helow19274 commented 2 years ago

image Опять встретился с этой ошибкой, хотя сейчас не было похоже, что мы битрикс сильно нагружали

badigit commented 1 year ago

Проблема очень актуальна, при обновлении сущностей возникает после обновления примерно 1000+ сущностей. 90%|███████████████████████████████████████████████████████████████████████████████████████████████▍ | 900/1000 [00:19<00:02, 46.05it/s] Traceback (most recent call last): File "fast_bitrix_mass_update.py", line 32, in b.call('crm.item.update', tasks) File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\bitrix.py", line 234, in sync_wrapper return loop.run_until_complete(coroutine(*args, *kwargs)) File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\asyncio\base_events.py", line 579, in run_until_complete return future.result() File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\logger.py", line 11, in wrapper return await func(args, **kwargs) File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\bitrix.py", line 168, in call return await self.srh.run_async(request_cls(self, method, items).run()) File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\srh.py", line 101, in run_async return await coroutine File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\user_request.py", line 262, in run get_by_ID=False, File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\mult_request.py", line 65, in run extracted_len = self.process_done_tasks(done) File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\mult_request.py", line 94, in process_done_tasks done_task.result(), self.get_by_ID File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\server_response.py", line 43, in extract_results self.raise_for_errors() File "C:\Users\Dee\AppData\Local\Programs\Python\Python37\lib\site-packages\fast_bitrix24\server_response.py", line 56, in raise_for_errors raise ErrorInServerResponseException(errors) fast_bitrix24.server_response.ErrorInServerResponseException: {'order0000000549': {'error': 'OPERATION_TIME_LIMIT', 'error_description': 'Method is blocked due to operation time limit.'}}

Попробую конечно что нибудь придумать, но моих знаний не хватает чтобы это корректно обрабатывать

zznobzz commented 12 months ago

Постоянно ловлю ошибку при попытке вытянуть методом list_and_get сделки. Общее количество сделок около 70 000. В среднем падает на 21 000. Снимок экрана 2023-11-08 220707

leshchenko1979 commented 7 months ago

Сейчас при отправке батчей на сервер время исполнения учитывается по методу "batch".

При этом сообщения об ошибке продолжают приходить.

На самом деле нужно учитывать время исполнения раздельно по каждому методу, используемому внутри батча.

badigit commented 7 months ago

Также можно иметь в виду что минимальное фиксируемое значение исполнения 0.1 сек. Время выполнения методов с меньшим значением не фиксируется в operating.

Не зная этого, можно при тестах долго одуплять, почему запросы идут а значение не меняется.