Добавить генератор урожая в функцию Python - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть такая проблема:

Для оптимальной производительности записи должны обрабатываться партиями.Создайте функцию генератора «пакетной», которая будет выдавать пакеты по 1000 записей за раз и может использоваться следующим образом:

  for subrange, batch in batched(records, size=1000):
      print("Processing records %d-%d" %(subrange[0], subrange[-1]))
      process(batch)

Я пробовал так:

def myfunc(batched):
    for subrange, batch in batched(records, size=1000):
        print("Processing records %d-%d" %
        (subrange[0], subrange[-1]))
     yield(batched)

Но яЯ не уверен, так как я новичок в генераторах Python, это просто ничего не показывает на консоли, нет ошибок, ничего, какие-либо идеи?

1 Ответ

0 голосов
/ 16 декабря 2018

Генераторы ленивы, должны потреблять или загружать его, чтобы он что-то сделал.

См. Пример:

def g():
    print('hello world')
    yield 3

x = g() # nothing is printed. Magic..

Должен либо сделать:

x = g()
x.send(None) # now will print

Или:

x = g()
x.next()

[править]

Обратите внимание, что при явном выполнении .next() в конечном итоге вы получите ошибку StopIteration, поэтому вы должны ее перехватить или подавить

...