File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed
Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ """Download flags of top 20 countries by population
2+
3+ asyncio + aiottp version
4+
5+ Sample run::
6+
7+ $ python3 flags_asyncio.py
8+ EG VN IN TR RU ID US DE CN MX JP BD NG ET FR BR PH PK CD IR
9+ 20 flags downloaded in 1.07s
10+
11+ """
12+ # BEGIN FLAGS_ASYNCIO
13+ import asyncio
14+
15+ import aiohttp # <1>
16+
17+ from flags import BASE_URL , save_flag , show , main # <2>
18+
19+
20+ @asyncio .coroutine # <3>
21+ def get_flag (cc ):
22+ url = '{}/{cc}/{cc}.gif' .format (BASE_URL , cc = cc .lower ())
23+ resp = yield from aiohttp .request ('GET' , url ) # <4>
24+ image = yield from resp .read () # <5>
25+ return image
26+
27+
28+ @asyncio .coroutine
29+ def download_one (cc ): # <6>
30+ image = yield from get_flag (cc ) # <7>
31+ show (cc )
32+ save_flag (image , cc .lower () + '.gif' )
33+ return cc
34+
35+
36+ def download_many (cc_list ):
37+ loop = asyncio .get_event_loop () # <8>
38+ to_do = [download_one (cc ) for cc in sorted (cc_list )] # <9>
39+ wait_coro = asyncio .wait (to_do ) # <10>
40+ res , _ = loop .run_until_complete (wait_coro ) # <11>
41+ loop .close () # <12>
42+
43+ return len (res )
44+
45+
46+ if __name__ == '__main__' :
47+ main (download_many )
48+ # END FLAGS_ASYNCIO
You can’t perform that action at this time.
0 commit comments