python 异步协程

 1 """A very simple co-routine scheduler.
 2 Note: this is written to favour simple code over performance.
 3 """
 4 from types import coroutine
 5 
 6 
 7 @coroutine
 8 def switch():
 9     yield
10 
11 
12 def run(coros):
13     """Execute a list of co-routines until all have completed."""
14     # Copy argument list to avoid modification of arguments.
15     coros = list(coros)
16 
17     while len(coros):
18         # Copy the list for iteration, to enable removal from original
19         # list.
20         for coro in list(coros):
21             try:
22                 coro.send(None)
23             except StopIteration:
24                 coros.remove(coro)
25 
26 async def coro1():
27     print("C1: Start")
28     await switch()
29     print("C1: a")
30     await switch()
31     print("C1: b")
32     await switch()
33     print("C1: c")
34     await switch()
35     print("C1: Stop")
36 
37 
38 async def coro2():
39     print("C2: Start")
40     await switch()
41     print("C2: a")
42     await switch()
43     print("C2: b")
44     await switch()
45     print("C2: c")
46     await switch()
47     print("C2: Stop")
48 
49 
50 run([coro1(), coro2()])

 

posted @ 2017-05-03 11:11  Erick-LONG  阅读(201)  评论(0编辑  收藏  举报