携程协程是什么 作用 Python 极简代码举例协程Coroutine简单一句话同一个线程里来回切换执行多个任务不用等一个卡死就能跑下一个适合等待网络、等待IO、爬虫、接口请求、批量任务协程核心作用不占CPU等待时自动切去干别的事并发速度远超普通循环开销比线程、进程小非常多适合爬虫、发请求、文件读写、接口批量调用最简单易懂代码示例1. 普通顺序执行慢挨个等干完一个才下一个importtimedeftask(name):print(f{name}开始干活)time.sleep(2)# 模拟等待耗时print(f{name}干完了)starttime.time()task(任务1)task(任务2)task(任务3)endtime.time()print(f总耗时{end-start:.2f}秒)运行结果一共耗时 6秒左右2. 协程并发执行快很多等待的时候直接切去跑别的任务importasyncioimporttime协程函数必须加 asyncasyncdeftask(name):print(f{name}开始干活)awaitasyncio.sleep(2)# 协程专用等待会让出资源print(f{name}干完了)asyncdefmain():starttime.time()# 一次性并发运行多个协程t1asyncio.create_task(task(任务1))t2asyncio.create_task(task(任务2))t3asyncio.create_task(task(任务3))awaitt1awaitt2awaitt3 endtime.time()print(f总耗时{end-start:.2f}秒)#启动协程程序asyncio.run(main())运行结果一共只耗时 2秒左右关键区别看懂就会协程def 普通函数 → async def 协程函数time.sleep 卡死不动 → await asyncio.sleep 让出资源await遇到等待先去跑别的任务create_task把任务丢进并发队列一起跑实际常用场景协程批量请求爬虫例子importasyncioimportaiohttpasyncdeffetch(url):asyncwithaiohttp.ClientSession()assession:asyncwithsession.get(url)asresp:textawaitresp.text()print(f页面长度{len(text)})asyncdefmain():urls[https://www.baidu.com,https://www.qq.com,https://www.sogou.com]tasks[fetch(u)foruinurls]awaitasyncio.gather(*tasks)asyncio.run(main())一次性并发爬多个网站速度飞快。总结记忆协程 单线程多任务切换遇到等待就切任务提升IO任务速度关键字 async 、 await 、 create_task适合爬虫、接口、批量查询、定时任务
协程详细介绍
携程协程是什么 作用 Python 极简代码举例协程Coroutine简单一句话同一个线程里来回切换执行多个任务不用等一个卡死就能跑下一个适合等待网络、等待IO、爬虫、接口请求、批量任务协程核心作用不占CPU等待时自动切去干别的事并发速度远超普通循环开销比线程、进程小非常多适合爬虫、发请求、文件读写、接口批量调用最简单易懂代码示例1. 普通顺序执行慢挨个等干完一个才下一个importtimedeftask(name):print(f{name}开始干活)time.sleep(2)# 模拟等待耗时print(f{name}干完了)starttime.time()task(任务1)task(任务2)task(任务3)endtime.time()print(f总耗时{end-start:.2f}秒)运行结果一共耗时 6秒左右2. 协程并发执行快很多等待的时候直接切去跑别的任务importasyncioimporttime协程函数必须加 asyncasyncdeftask(name):print(f{name}开始干活)awaitasyncio.sleep(2)# 协程专用等待会让出资源print(f{name}干完了)asyncdefmain():starttime.time()# 一次性并发运行多个协程t1asyncio.create_task(task(任务1))t2asyncio.create_task(task(任务2))t3asyncio.create_task(task(任务3))awaitt1awaitt2awaitt3 endtime.time()print(f总耗时{end-start:.2f}秒)#启动协程程序asyncio.run(main())运行结果一共只耗时 2秒左右关键区别看懂就会协程def 普通函数 → async def 协程函数time.sleep 卡死不动 → await asyncio.sleep 让出资源await遇到等待先去跑别的任务create_task把任务丢进并发队列一起跑实际常用场景协程批量请求爬虫例子importasyncioimportaiohttpasyncdeffetch(url):asyncwithaiohttp.ClientSession()assession:asyncwithsession.get(url)asresp:textawaitresp.text()print(f页面长度{len(text)})asyncdefmain():urls[https://www.baidu.com,https://www.qq.com,https://www.sogou.com]tasks[fetch(u)foruinurls]awaitasyncio.gather(*tasks)asyncio.run(main())一次性并发爬多个网站速度飞快。总结记忆协程 单线程多任务切换遇到等待就切任务提升IO任务速度关键字 async 、 await 、 create_task适合爬虫、接口、批量查询、定时任务