Coroutines in Python (chapter 4)
# Section 4.3: Coroutines and cooperative threads
import queue
n = 0
def build():
global n
r = n
print("build", r)
n += 1
return r
def use(n):
print("use", n)
q = queue.Queue(10)
consume = None
produce = None
def produce_gen():
n = 0
while True:
while not q.full(): item = build(); q.put(item)
yield consume
def consume_gen():
while True:
while not q.empty(): item = q.get(); use(item)
yield produce
produce = produce_gen()
consume = consume_gen()
c = produce
for i in range(5): c = next(c)