def sender(m: Manager, uid: str) -> None: with m.open_writer_queue(uid) as q: try: for i in range(1, 10): m = f"SQS message #{i}" q.put({"message": m}) time.sleep(0.1) except ClientError as e: print("!!", e)
def queue() -> Q[str]: import atexit m = Manager() m = m.__enter__() def _teardown(): nonlocal m m.__exit__(None, None, None) # todo: cache exception atexit.register(_teardown) # todo: skip uid = m.generate_uid( "https://ap-northeast-1.queue.amazonaws.com/784330574880/minitask_foo.fifo" ) m.spawn(consume, uid=uid) q = m.open_writer_queue(uid) def _teardown2(): q.__exit__(None, None, None) # todo: cache exception atexit.register(_teardown2) return q.__enter__()
def consume(m: Manager, uid: str): with m.open_reader_queue(uid) as q: for item in q: print(os.getpid(), "<-", item)
def receiver(m: Manager, uid: str) -> None: with m.open_reader_queue(uid) as q: for item in q: print("<-", item)
def run(*, queue_url: str): with Manager(Config(MessageAttributeNames=["All"])) as m: m.spawn(sender, uid=queue_url) m.spawn(receiver, uid=queue_url)