...

/

A Better Coroutine Example

A Better Coroutine Example

Let's see a good example of coroutine using aiohttp package.

The aiohttp package is designed for creating asynchronous HTTP clients and servers. You can install it with pip like this:

Press + to interact
pip3 install aiohttp

Using aiohttp to download files

Once that’s installed, let’s update our code to use aiohttp so that we can download the files:

Note: Click on the link below the widget to see the list of downloaded pdf(s) opened.

import aiohttp
import asyncio
import async_timeout
import os

import time

async def download_coroutine(session, url):
    with async_timeout.timeout(1000):
        async with session.get(url) as response:
            filename = os.path.basename(url)
            with open(filename, 'wb') as f_handle:
                while True:
                    chunk = await response.content.read(1024)
                    if not chunk:
                        break
                    f_handle.write(chunk)
                await response.release()
                return response.status == 200

async def main(loop):
    urls = ["http://www.irs.gov/pub/irs-pdf/f1040.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040a.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040ez.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040es.pdf",
        "http://www.irs.gov/pub/irs-pdf/f1040sb.pdf"]

    async with aiohttp.ClientSession(loop=loop) as session:
        for url in urls:
            print(await download_coroutine(session, url))
            


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(loop))
Using aiohttp to download the files

You ...