Skip to content

Instantly share code, notes, and snippets.

@eva0919
Last active May 18, 2017 15:44
Show Gist options
  • Save eva0919/ca2d6bde3748adc4fc186cde11a434c9 to your computer and use it in GitHub Desktop.
Save eva0919/ca2d6bde3748adc4fc186cde11a434c9 to your computer and use it in GitHub Desktop.

前題

  • 兩個大神吵架      
    但由於code讓我跑起來都還是停留在sync的感覺,但明明感覺async await的語法跟yield應該可以互換才對,我資質愚鈍,只好再看一下官方文件(遺忘好久) 來修改一下。    

程式

import asyncio
import time

begin = time.time()

def async_generator():
    @asyncio.coroutine
    def count_down(i, c):
        print('Run {}, countdown {} (clock {:.5f})'.format(i, c, time.time() - begin))
        if c == 0:
            return
        yield from asyncio.sleep(0.5)
        yield from count_down(i, c - 1)

    i = 1
    while i <= 5:
        yield count_down(i, i)
        i += 1

@asyncio.coroutine
def run_all(asyncGen):
    for a in asyncGen:
        yield from a


loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.gather(
    run_all(async_generator()),
    run_all(async_generator()),
) )
loop.close()

結果如下

Run 1, countdown 1 (clock 0.00050)
Run 1, countdown 1 (clock 0.00066)
Run 1, countdown 0 (clock 0.50147)
Run 2, countdown 2 (clock 0.50162)
Run 1, countdown 0 (clock 0.50175)
Run 2, countdown 2 (clock 0.50182)
Run 2, countdown 1 (clock 1.00257)
Run 2, countdown 1 (clock 1.00276)
Run 2, countdown 0 (clock 1.50356)
Run 3, countdown 3 (clock 1.50377)
Run 2, countdown 0 (clock 1.50389)
Run 3, countdown 3 (clock 1.50397)
Run 3, countdown 2 (clock 2.00476)
Run 3, countdown 2 (clock 2.00498)
Run 3, countdown 1 (clock 2.50575)
Run 3, countdown 1 (clock 2.50594)
Run 3, countdown 0 (clock 3.00674)
Run 4, countdown 4 (clock 3.00712)
Run 3, countdown 0 (clock 3.00725)
Run 4, countdown 4 (clock 3.00732)
Run 4, countdown 3 (clock 3.50810)
Run 4, countdown 3 (clock 3.50832)
Run 4, countdown 2 (clock 4.00911)
Run 4, countdown 2 (clock 4.00934)
Run 4, countdown 1 (clock 4.50968)
Run 4, countdown 1 (clock 4.51000)
Run 4, countdown 0 (clock 5.01084)
Run 5, countdown 5 (clock 5.01100)
Run 4, countdown 0 (clock 5.01117)
Run 5, countdown 5 (clock 5.01128)
Run 5, countdown 4 (clock 5.51200)
Run 5, countdown 4 (clock 5.51223)
Run 5, countdown 3 (clock 6.01298)
Run 5, countdown 3 (clock 6.01319)
Run 5, countdown 2 (clock 6.51349)
Run 5, countdown 2 (clock 6.51368)
Run 5, countdown 1 (clock 7.01446)
Run 5, countdown 1 (clock 7.01468)
Run 5, countdown 0 (clock 7.51548)
Run 5, countdown 0 (clock 7.51577)

稍微修改CODE才達到我覺得async,所以TMD你們說的async是甚麼 身為阿廢看不懂啊!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment