Chris Angelico <ros...@gmail.com>: > On Mon, Feb 22, 2016 at 1:15 AM, Ho Yeung Lee <davidbenny2...@gmail.com> > wrote: >> 0 ---> 2 --> 3--> 1 ---> 0 >> ---> 4 / > > So after task 2 completes, tasks 3 and 4 both become available (and > can run in parallel), but then task 1 must wait until both have > finished before it runs? I'm not an asyncio expert, but this sounds > like a fairly straight-forward dependency requirement. If you were to > implement these as four separate threads, you would have threads 3 and > 4 raise semaphores which thread 1 blocks on; I'm sure there'll be an > equivalent in asyncio. > > [...] > > (Can an asyncio expert tell me how to tidy this code up, please? I'm > sure this isn't the cleanest.)
Not an expert, but this does the trick: ======================================================================== #!/usr/bin/env python3 import asyncio def main(): loop = asyncio.get_event_loop() loop.run_until_complete(t0()) async def t0(): print("start t0") await t2() await asyncio.wait([ t3(), t4() ]) await t1() print("finish t0") async def t1(): print("start t1") await asyncio.sleep(1) print("finish t1") async def t2(): print("start t2") await asyncio.sleep(1) print("finish t2") async def t3(): print("start t3") await asyncio.sleep(1) print("finish t3") async def t4(): print("start t4") await asyncio.sleep(1) print("finish t4") if __name__ == '__main__': main() ======================================================================== Marko -- https://mail.python.org/mailman/listinfo/python-list