python初始异步编程第三节
""" 刚刚我们讲了asyncio 处理请求和异步处理 但是在真实项目开发中,我们往往不会直接使用asyncio来处理网络请求, 而是使用其他封装的类库,例如 aiohttp,aiofile 我们接着前两个案例来完成真实 网络请求抓取数据 和读取数据文件的案例 """ import asyncio import aiohttp import aiofiles from time import perf_counter """ 抓取网页内容异步函数 async: 表示这是一个异步函数 def 定义函数关键字 with 语句会自动管理资源的生命周期,确保即使发生异常也能正确释放资源。它通常与支持上下文管理协议的对象一起使用(这些对象实现了 __enter__() 和 __exit__() 方法)。 with 语法 with open('example.txt', 'r') as file: 这里 as file 是把返回值赋值给file async with用于异步上下文管理, 它确保在操作完成后正确释放资源(例如关闭网络连接)。 aiohttp.ClientSession(): 创建一个 ClientSession 对象,用于管理 HTTP 请求的生命周期。它是 aiohttp 提供的一个类,能够高效复用连接 as session: 将创建的 ClientSession 对象赋值给变量 session,以便后续使用 session.get(url): 使用 session 发起一个 GET 请求到指定的 url as resp: 将返回的响应对象赋值给变量 resp await: 用于等待异步操作完成。在这里,resp.text() 是一个异步方法,它会解析响应内容并返回字符串形式的数据 resp.text(): 调用响应对象的 text() 方法,将响应体以字符串形式返回 """ async def fetch_url(url): async with aiohttp.ClientSession() as session: async with session.get(url) as resp: return await resp.text() async def read_file(file_path): async with aiofiles.open(file_path, 'r') as file: return await file.read() async def main(): url="https://i.cnblogs.com/articles/edit-done;postId=18786562;isPublished=true" file_path="./异步编程第三节测试文件.txt" #把协程请求函数包装成任务 task1=asyncio.create_task(fetch_url(url)) #把协程读取文件函数包装成任务 task2=asyncio.create_task(read_file(file_path)) #获取到携程函数的返回值,使用await url_content=await task1 file_content=await task2 print(url_content) print(file_content) if __name__ == '__main__': #记录开始时间 start_time=perf_counter() #创建事件循环,把协程放入事件循环中 asyncio.run(main()) end_time=perf_counter() print("执行时间:",end_time-start_time)
输出 执行时间: 0.5933730830000001
输出结果:
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=EDGE"> <title>用户中心 - 博客园</title> <base href="/"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="博客园是一个面向开发者的知识分享社区。"> <meta name="og:description" content="博客园是一个面向开发者的知识分享社区。"> <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> <link rel="icon" href="https://assets.cnblogs.com/favicon_v3_2.ico" type="image/x-icon"> <script async="" src="https://www.googletagmanager.com/gtag/js?id=G-3Q0DVSGN10"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } </script> <style>.mat-typography{font:400 14px/20px -apple-system,Noto Sans,Helvetica Neue,Helvetica,Nimbus Sans L,Arial,Liberation Sans,PingFang SC,Hiragino Sans GB,Noto Sans CJK SC,Source Han Sans SC,Source Han Sans CN,Microsoft YaHei,Wenquanyi Micro Hei,WenQuanYi Zen Hei,ST Heiti,SimHei,WenQuanYi Zen Hei Sharp,sans-serif;letter-spacing:normal}@-webkit-keyframes cdk-text-field-autofill-start{}@-webkit-keyframes cdk-text-field-autofill-end{}body{margin:0}@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{-webkit-animation-timing-function:cubic-bezier(.5,0,.701732,.495819);animation-timing-function:cubic-bezier(.5,0,.701732,.495819);transform:translateX(0)}59.15%{-webkit-animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);animation-timing-function:cubic-bezier(.302435,.381352,.55,.956352);transform:translateX(83.67142%)}to{transform:translateX(200.611057%)}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(.08)}36.65%{-webkit-animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);animation-timing-function:cubic-bezier(.334731,.12482,.785844,1);transform:scaleX(.08)}69.15%{-webkit-animation-timing-function:cubic-bezier(.06,.11,.6,1);animation-timing-function:cubic-bezier(.06,.11,.6,1);transform:scaleX(.661479)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{-webkit-animation-timing-function:cubic-bezier(.15,0,.515058,.409685);animation-timing-function:cubic-bezier(.15,0,.515058,.409685);transform:translateX(0)}25%{-webkit-animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);animation-timing-function:cubic-bezier(.31033,.284058,.8,.733712);transform:translateX(37.651913%)}48.35%{-webkit-animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);animation-timing-function:cubic-bezier(.4,.627035,.6,.902026);transform:translateX(84.386165%)}to{transform:translateX(160.277782%)}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{-webkit-animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);animation-timing-function:cubic-bezier(.205028,.057051,.57661,.453971);transform:scaleX(.08)}19.15%{-webkit-animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);animation-timing-function:cubic-bezier(.152313,.196432,.648374,1.004315);transform:scaleX(.457104)}44.15%{-webkit-animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);animation-timing-function:cubic-bezier(.257759,-.003163,.211762,1.38179);transform:scaleX(.72796)}to{transform:scaleX(.08)}}@keyframes mdc-linear-progress-buffering{0%{transform:rotate(180deg) translateX(-10px)}}.app-root-loading .mdc-linear-progress{position:relative;overflow:hidden;width:100%;height:4px;transition:opacity .25s cubic-bezier(.4,0,.6,1) 0ms;transform:translateZ(0);outline:1px solid transparent}.app-root-loading .mdc-linear-progress__bar{position:absolute;width:100%;height:100%;transition:transform .25s cubic-bezier(.4,0,.6,1) 0ms;transform-origin:top left;-webkit-animation:none;animation:none}.app-root-loading .mdc-linear-progress__bar-inner{position:absolute;display:inline-block;width:100%;-webkit-animation:none;animation:none;border-top:4px solid}.app-root-loading .mdc-linear-progress__buffer{position:absolute;display:flex;width:100%;height:100%}.app-root-loading .mdc-linear-progress__buffer-dots{flex:auto;transform:rotate(180deg);-webkit-animation:mdc-linear-progress-buffering .25s linear infinite;animation:mdc-linear-progress-buffering .25s linear infinite;background-repeat:repeat-x;background-size:10px 4px}.app-root-loading .mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis .25s cubic-bezier(.4,0,.6,1) 0ms}.app-root-loading .mdc-linear-progress__primary-bar{transform:scaleX(0)}.app-root-loading .mdc-linear-progress__secondary-bar{visibility:hidden}.app-root-loading .mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.app-root-loading .mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%;-webkit-animation:mdc-linear-progress-primary-indeterminate-translate 2s linear infinite;animation:mdc-linear-progress-primary-indeterminate-translate 2s linear infinite}.app-root-loading .mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-primary-indeterminate-scale 2s linear infinite;animation:mdc-linear-progress-primary-indeterminate-scale 2s linear infinite}.app-root-loading .mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;visibility:visible;-webkit-animation:mdc-linear-progress-secondary-indeterminate-translate 2s linear infinite;animation:mdc-linear-progress-secondary-indeterminate-translate 2s linear infinite}.app-root-loading .mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{-webkit-animation:mdc-linear-progress-secondary-indeterminate-scale 2s linear infinite;animation:mdc-linear-progress-secondary-indeterminate-scale 2s linear infinite}.app-root-loading .mdc-linear-progress__bar-inner{border-color:#3494fc}.app-root-loading .mdc-linear-progress__buffer-dots{background-image:url("data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E")}.app-root-loading .mdc-linear-progress__buffer-bar{background-color:#c2dffe}</style><link rel="stylesheet" href="styles.1097ca9cceb9e7f707d8.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles.1097ca9cceb9e7f707d8.css"></noscript></head> <body class="mat-typography"> <app-root> <div class="app-root-loading"> <div role="progressbar" class="mdc-linear-progress mdc-linear-progress--indeterminate"> <div class="mdc-linear-progress__buffer"> <div class="mdc-linear-progress__buffer-bar"></div> <div class="mdc-linear-progress__buffer-dots"></div> </div> <div class="mdc-linear-progress__bar mdc-linear-progress__primary-bar"> <span class="mdc-linear-progress__bar-inner"></span> </div> <div class="mdc-linear-progress__bar mdc-linear-progress__secondary-bar"> <span class="mdc-linear-progress__bar-inner"></span> </div> </div> </div> </app-root> <script nomodule> document.body.insertAdjacentHTML( 'afterbegin', '<div id="unsupported-browser">您使用的浏览器不受支持,建议使用新版 <a href="https://www.google.cn/intl/zh-CN/chrome/">Google Chrome</a> / <a href="https://www.microsoft.com/zh-cn/edge">Microsoft Edge</a> / <a href="https://www.mozilla.org/zh-CN/firefox/">Firefox</a> 浏览器 <button class="close" onclick="document.getElementById(\'unsupported-browser\').style.display = \'none\'">×</button></div>' ); </script> <script src="https://account-cdn.cnblogs.com/runtime-es2015.1b903f4d6d8454c0f355.js" type="module"></script><script src="https://account-cdn.cnblogs.com/runtime-es5.1b903f4d6d8454c0f355.js" nomodule defer></script><script src="https://account-cdn.cnblogs.com/polyfills-es5.66a11acd99cd44b54fdf.js" nomodule defer></script><script src="https://account-cdn.cnblogs.com/polyfills-es2015.6bf4aa9c699e11f16a0c.js" type="module"></script><script src="https://account-cdn.cnblogs.com/main-es2015.07c1d21cd9ebfac0ede3.js" type="module"></script><script src="https://account-cdn.cnblogs.com/main-es5.07c1d21cd9ebfac0ede3.js" nomodule defer></script> </body></html> 你好我是你的大哥 执行时间: 0.5933730830000001

浙公网安备 33010602011771号