Мне нужно работать с генераторами, что бы отдавать chunked запрос браузеру. Я делаю это так:
for line in data:
yield line
Теперь у меня есть некая блокирующая функция, которая что-то делает. Пока она чот-то делает, результат ее работы можно получить через callback.
Внимание, вопрос: как мне через callback функцию создать генератор?
Написал такой код, но он блокирующий:
from multiprocessing import Queue, Process
import random
from time import sleep
qq = Queue()
def fill_the_qq():
for x in xrange(10):
qq.put(x)
sleep(0.3)
def generator_func():
print("*** generator_func started ***")
while not qq.empty():
item = qq.get()
yield item
else:
print "empty :("
if __name__ == '__main__':
fill_the_qq()
for line in generator_func():
print line
raw_input("Press any key to continue")
получилось такое и оно не работает:
from multiprocessing import Queue, Process
import random
from time import sleep
qq = Queue()
def fill_the_qq():
for x in xrange(10):
print "putting {x} item to queue...".format(x=x)
qq.put(x)
sleep(0.3)
def generator_func():
print("*** generator_func started ***")
while not qq.empty():
item = qq.get()
yield item
else:
print "empty :("
if __name__ == '__main__':
p = Process(target=fill_the_qq,)
p.start()
for line in generator_func():
print line
raw_input("Press any key to continue")
Возможно, кто-то сможет предложить более правильное решение.
Спасибо.