Python异步协程示例

"""
import asyncio


async def func():
    print("喵")


if __name__ == '__main__':
    # # 协程对象要想运行,必须借助于event_loop
    # # 拿到协程对象
    f = func()
    # # 拿到事件循环
    # event_loop = asyncio.get_event_loop()
    # # event_loop执行协程对象,直到对象内的内容执行完毕为止.
    # event_loop.run_until_complete(f)
    asyncio.run(f)


"""
'''
import asyncio
import time


async def func1():
    print("我是func1开始")
    await asyncio.sleep(1)
    print("我是func1结束")


async def func2():
    print("我是func2开始")
    await asyncio.sleep(2)
    print("我是func2结束")


async def func3():
    print("我是func3开始")
    await asyncio.sleep(3)
    print("我是func3结束")


if __name__ == '__main__':
    start = time.time()
    f1 = func1()
    f2 = func2()
    f3 = func3()
    # 将三个任务放在一起,组合成任务队列
    tasks = [f1, f2, f3]
    asyncio.run(asyncio.wait(tasks))
    print(time.time()-start)
'''
'''
import asyncio
import time


async def download(url, t):
    print("开始下载了")
    await asyncio.sleep(t)
    print("下载完了")


async def main():
    urls = [
        'http://www.baidu.com',
        'http://www.abab.com',
        'http://www.lll.com',
    ]
    tasks = []
    for url in urls:
        task = asyncio.create_task(download(url, 3))
        tasks.append(task)
    await asyncio.wait(tasks)


if __name__ == '__main__':
    asyncio.run(main())

'''
'''
import asyncio


async def func1():
    print("我是func1开始")
    await asyncio.sleep(1)
    print("我是func1结束")
    return 'func1的返回值'


async def func2():
    print("我是func2开始")
    await asyncio.sleep(2)
    print("我是func2结束")
    return 'func2的返回值'


async def func3():
    print("我是func3开始")
    await asyncio.sleep(3)
    print("我是func3结束")
    return 'func3的返回值'


async def main():
    f1 = func1()
    f2 = func2()
    f3 = func3()
    tasks = [asyncio.create_task(f1), asyncio.create_task(f3), asyncio.create_task(f2)]
    done, pending = await asyncio.wait(tasks)
    for res in done:
        print(res.result())
    res = await asyncio.gather(*tasks)
    print(res)

if __name__ == '__main__':
    asyncio.run(main())
'''

import asyncio
import aiohttp
import aiofiles


async def download(url):
    print(f'开始下载{url}')
    file_name = url.split('/')[-1]
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as res:
            content = await res.content.read()
            async with aiofiles.open(file_name, mode='wb') as f:
                await f.write(content)
    print(f'下载完成{url}')


async def main():
    url_list = [
        'https://oss-img.mengguzhiai.com/tutuji/20231018/jkyqd3icg24.jpg',
        'https://oss-img.mengguzhiai.com/tutuji/20230626/qviw1aaxajt.jpg',
        'https://oss-img.mengguzhiai.com/tutuji/20230407/ldsf23o44jg.jpg',
    ]
    tasks = []
    for url in url_list:
        t = asyncio.create_task(download(url))
        tasks.append(t)

    await asyncio.wait(tasks)


if __name__ == '__main__':
    asyncio.run(main())