Python – генератор не работает со следующим методомPython

Программы на Python
Ответить
Anonymous
 Python – генератор не работает со следующим методом

Сообщение Anonymous »

Я создал генератор для выполнения нумерации страниц на API:

Код: Выделить всё

def page_helper(req, timeout=5, page=1, **kwargs):
print(f"Page {page}", end="\r")
try:
response = req(params={**kwargs, "page": page})
response = response.json()

except Exception as e:
status = response.status_code

if status == "429":
print(f"Rate limited. Waiting {timeout} seconds.")
time.sleep(timeout)
yield from page_helper(req, page=page, **kwargs)
else:
raise e

else:
if len(response) == kwargs["limit"]:
yield from page_helper(req, page=page + 1, **kwargs)

yield response

Позже я использую этот генератор где-то вот так

Код: Выделить всё

batches = page_helper()

# get insert and updates per batch
for i, batch in enumerate(batches):
print(f"Batch {i + 1}", end="\r")
insert_batch = []
update_batch = []

# ... process batch

Я хочу, чтобы он извлекал каждую страницу как пакет и обрабатывал ее перед получением следующего пакета. Извлечение пакетов работает отлично, но страницы продолжают загружаться без промежуточной обработки.
Я пытался проверить генератор, вызвав next, и ожидаю, что он вернет только один пакет. Однако он немедленно запускает полные итерации:

Код: Выделить всё

next(batches) # --> Performs full iteration
next(batches)
next(batches)
next(batches)
Что-то не так с моей функцией генератора?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ext-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»