#!/usr/bin/env python """ An exemple demostrating issues with garbage collection & asyncio in Python 3.4.1 """ import asyncio import gc @asyncio.coroutine def producer(queue): while True: yield from queue.put(True) @asyncio.coroutine def consumer(queue): # only take a single message mesg = yield from queue.get() def spawn_consumers_and_producers(n): for i in range(n): queue = asyncio.Queue(2) asyncio.async(producer(queue)) asyncio.async(consumer(queue)) @asyncio.coroutine def monitor(): for i in range(10): print('tasks found {}'.format(len(asyncio.Task.all_tasks()))) yield from asyncio.sleep(1) gc.collect() def main(n, *, do_gc): spawn_consumers_and_producers(n) asyncio.get_event_loop().run_until_complete(monitor()) asyncio.get_event_loop().close() if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('-n', type=int, default=100000) parser.add_argument('--gc', action='store_true') args = parser.parse_args() main(args.n, do_gc=args.gc)