Форум сайта python.su
Вообще, если есть функция генерирующая этот генератор, то можно разделить на два или нужно число генераторов и обработать каждый в отдельном треде.
def fib():
a, b = 0, 1
while True:
yield a + b
a, b = b, a + b
def two_streams(gen_func):
def in_one(gen):
a = 1
for i in gen:
if a % 2:
yield i
a = 0
else:
a = 1
new = gen_func()
new.next()
return in_one(gen_func()), in_one(new)
def join_streams(*gens):
while True:
yield map(lambda x: x.next(), gens)
def take(gen, number):
for i, g in enumerate(gen):
if i <= number:
yield g
else:
raise StopIteration
In [35]: for i in take(join_streams(*two_streams(fib)), 10):
....: print i
....:
[1, 2]
[3, 5]
[8, 13]
[21, 34]
[55, 89]
[144, 233]
[377, 610]
[987, 1597]
[2584, 4181]
[6765, 10946]
[17711, 28657]
Офлайн