Skip to content

Instantly share code, notes, and snippets.

@AvnerBen
Created August 28, 2021 09:26
Show Gist options
  • Save AvnerBen/023cc7bce5e4e51cbb5b818fbb187ec8 to your computer and use it in GitHub Desktop.
Save AvnerBen/023cc7bce5e4e51cbb5b818fbb187ec8 to your computer and use it in GitHub Desktop.
""" AB/PP/5: Cooperative Producer/Consumer: 3. Producer iterates on polymorphic Consumer (pushing)
"""
from threading import Thread
from typing import Generator
import time
class Producer(Thread):
def __init__(self, outp: Generator):
Thread.__init__(self)
self.toStop = False
self.outp = outp
def run(self):
i = 1
next(self.outp) # 1
while not self.toStop:
self.outp.send(f'Round {i}'.format(i)) # 2
i += 1
self.outp.close() # 3
def stop(self):
self.toStop = True
def consume():
""" Coroutine that consumes messages one at a time
"""
try:
while True:
message = (yield) # 4
print(message)
time.sleep(2) # 5
except GeneratorExit: # 6
print('[End of input]')
def main():
aProducer = Producer(consume()) # 7
aProducer.start()
time.sleep(20)
aProducer.stop()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment