当前位置: 首页 > news >正文

淘宝联盟怎么建网站用asp做网站流程

淘宝联盟怎么建网站,用asp做网站流程,公司网站注意事项,江苏省建设局官方网站查询关于协程#xff0c;asyncio#xff0c;async#xff0c;await#xff0c;loop的概念#xff0c;参照上一篇文章可迭代对象#xff0c;迭代器#xff0c;生成器#xff0c;协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念#xff0c;但是这些东西实际上该怎…关于协程asyncioasyncawaitloop的概念参照上一篇文章可迭代对象迭代器生成器协程-CSDN博客 上一章我们详细的讲解了上述各个名词的概念但是这些东西实际上该怎么用还不太清除这一章做一点补充 总结  1async用于定义协程函数 2协程函数初始化得到的是协程对象协程对象不能直接执行 3协程对象的执行方式要么用await执行但是await只能出现在协程函数里面所以它不能作为协程的启动方式要么把协程转化为Task运行因为Task里面含有send类似于生成器的next这里用next其实也行兼容同理await为什么能运行协程也是因为它含有send因为await就是yield from的平替 4有了Task以后如果直接运行Task.run就是手动驱动协程函数那么对于同时要运行多个协程就要手动运行多个Task.run很费劲所以引入eventloopeventloop有两个记录列表一个是就绪列表_ready(一个双向列表)一个是待定任务列表_schedule(一个小顶堆保证最小时刻任务在最前面)此时loop用run_forver的无限循环不停的访问_ready去运行任务并不停的将待定任务列表中满足条件的任务加入到就绪列表待任务全部运行完则退出run_until_complete其实就是run_forever的进一步包装 5asyncio.wait和asyncio.gather主要功能就是把各个协程包装成Task当然网上说他俩都会运行协程函数拿到结果但其实不是他俩主动驱动协程函数的本质也是通过loop来驱动执行的只不过两者做了一定的包装因为loop.run_until_complete这些只接受一个变量参数你要运行多个协程的时候终归要先统一起来asyncio.wait本身也是一个协程asyncio.gather不是协程但好像也不是普通函数它继承自future暂定为一个future吧 6asyncio.run其实是对loop.run_until_complete()的包装也就是说asyncio.run(协程a)等同于run_until_complete协程a 一async用于定义协程函数 也就是说在函数定义前面加上async则讲该函数变成了一个协程coroutine此时你是无法直接运行该函数的因为通过上一章我们知道此时的函数有点类似于定义了yield的函数定义了yield的函数你第一次初始化的时候也是不运行的而是返回一个generator生成器要运行需要用next和或者send那么coroutine协程本身也是从yield发展过来的所以它也不能直接运行但此时不再是用next和send了虽然本质上没啥区别这里要运行协程函数可以用asyncio.run(协程函数名) 二Task和Future 上一章我们把本来的三个普通函数全部变成了协程函数async但其实除此之外还添加了两个小组件一个叫做Future(上一章图里最下方的小橙方块)一个叫做Task继承自Future上一章图里最上方的小蓝方块Task的作用就是调控整个协程函数那么对应的我们要运行协程函数则必须创建Task任务因为Task函数里面才有send函数如图 这和上一章里面构建的Task样例几乎一样只不过样例是极简的并且样例里面设置的是run函数这里是_step函数  也就是说所有的协程函数必须转化为Task才可以运行除了用await方式运行的协程因为await相当于yield from它自己带有send功能那么我们这里总结一下有多少种运行方式 aawait 最常用的await关键字可以直接运行协程函数但是await关键字只能在协程函数里面实现所以它不能作为协程启动的方式 basyncio.run(协程函数名) 上面的asyncio.run(协程函数名)其实run里面也做了转换操作把协程转成了Taskasyncio.run里面实际上是调用的loop.run_until_complete来执行函数如图 再深入进去 run_until_complete里面做了转换操作Task继承自Future这里就将协程转化为了Task c asyncio.wait 参考自剖析asyncio.wait的使用_笔记大全_设计学院 (python100.com) asyncio.wait函数的作用是等待一组协程coroutine。当一组协程全部完成后wait()方法返回两个Set对象一个是完成的任务列表一个是未完成的任务列表。 wait()方法常用的参数包括 1. coros协程对象的集合。 2. loopNone事件主循环对象若未指定默认为asyncio.get_event_loop()。 wait()方法返回的是一个协程 来看一下wait方法的源码 可以看到这里也是把传给它的协程转化为了Task 但有一点需要注意asyncio.wait(本身就是一个协程函数所以它没办法直接asyncio.wait([协程1, 协程2])这样运行的他一般需要跟在await关键字后面或者给到loop.run_until_complete等eventloop里面执行 d asyncio.gather( 其实和asyncio.wait(非常相似也是运行一组协程函数但不同点在于 1asyncio.wait(用一个set保存所有协程函数因为set是无序的所以写成函数也是无序执行的而gather是顺序执行顺序输出的 2asyncio.wait(会返回两个值done 和 pendingdone 为已完成的协程 Taskpending 为超时未完成的协程 Task需通过 future.result 调用 Task 的 result而asyncio.gather 返回的是所有已完成 Task 的 result不需要再进行调用或其他操作就可以得到全部结果此外wait(可以在任何一个协程完成时进行一些处理的场景因为它可以设置任何一个完成时返回 参考asyncio.gather vs asyncio.wait_asyncio gather 为什么要加*-CSDN博客 3gather不是协程函数但具体是啥也不清楚显示如下 这个类继承自future姑且当作是一个future吧 gather函数虽然不是协程函数但仍然无法直接执行目前来看能驱动它的只有await或者loop.run_until_complete等eventloop里面驱动 3loop 回忆上一章的内容我们最开始是直接用Task来执行协程的是手动进行驱动后面我们引入了eventloop让他来全程调度协程其实就是一个无限循环循环里面不停的运行各个回调函数这里的回调函数可以是协程函数也可以是普通函数 回忆一下eventloop的作用它有两个列表一个是就绪列表_ready一个是待定列表_scheduled然后每次调用loop.run_forever或者loop.call_soon或者loop.call_later来不断执行_ready里面的就绪任务并且不断判断待定列表里面的任务是否已经就绪如果就绪就加入到就绪任务列表执行所以我们现在准备说的loop.run_until_complete其实和上面的run_forevercall_sooncall_later这些是一样的就是用来执行_ready任务列表的甚至其实run_until_complete就是对run_forever的进一步包装 所以上面的asyncio.wait(也好或者asyncio.gather也好都可以丢给loop来自动调配也就实现了多任务协作的功能 我们拿loop.run_until_complete来举例子吧 loop.run_until_complete可以直接接协程函数也可以接asyncio.wait(或者asyncio.gather这些因为本质上loop.run_until_complete里面会把输入强制转化为Task对于普通函数的话可能是添加__await__方法个人理解 然后就是我们上一章讲过的死循环run_forever和单词循环运行_ready里面准备好的函数 run_once里面的逻辑和上一章我们的极简版本是一样的 先判断当前已经就绪的任务有多少然后一个个pop出来由于这里的任务已经转化为了Task所以默认调用Task的run方法整体来看还是非常清晰明了的 但是这里存在一个bug就是我们没看见把任务加入到_ready就绪列表里面的步骤所以我又回过头去调试看了一下发现了一点新的亮点 asyncio.wait和asyncio.gather进一步的区别 由于asyncio.wait本质是一个协程函数所以 loop.run_until_complete(asyncio.wait([ceshi(), ceshi2()])) 这段代码里面asyncio.wait([ceshi(), ceshi2()])返回一个协程对象并不会先执行asyncio.wait而是直接执行loop.run_until_complete在loop.run_until_complete里面把这个协程对象转化为Task的时候也把这个任务加入到了_ready就绪任务里面 此处进去后是loop.create_task 再进去 在这里把协程转化为了Task并且加入到了_ready就绪列表然后进入run_forever执行 但是asyncio.gather不是协程函数所以loop.run_until_complete(asyncio.gather(ceshi(), ceshi2()))其实是先进入asyncio.gather函数再进入run_until_complete而且gather函数里面就把协程对象转化为了Task并加入到了loop的_ready就绪列表调试如下每一层往下 在这个_ensure_future里面第一次的时候没有传入loop所以先调用了events._get_event_loop(stacklevel4)去取现有的loop也就是再最上层我们初始化的loop  所以这里用loop.create_task把协程对象转化为Task的时候就已经加入到_ready就绪列表了 后续我们进入到run_until_complete的时候可以发现此时它的_ready列表已经有了东西
http://www.zqtcl.cn/news/109017/

相关文章:

  • 站长素材音效下载重庆市建设工程信息网综合网
  • 网络营销专业就业方向wordpress插件dx-seo
  • 义乌有什么企业网站吗大良企业网站建设
  • 外链网站推荐几个html5标准网站建设
  • 博星卓越营销网站设计古镇镇建网站公司
  • 3. 是网站建设的重点网站后台添加关键词
  • 免费手机网站模板下载百度网站建设北京
  • 爱用建站建设网站的报告
  • 网站关键字被百度收录网站开发asp.net
  • 内部卷网站怎么做的h5在线编辑器
  • 搞定设计网站做的图怎么下载不了网站死链接怎么删除
  • 济南企业建站怎么样在pc端预览手机网站
  • c 手机网站开发模板最好的建站网站
  • 防城港市网站建设成功网站建设案例
  • 成都公司网站制作公司实验一 电子商务网站建设与维护
  • 即墨区城乡建设局网站300m空间够用吗 wordpress
  • 成都软件开发培训机构7个湖北seo网站推广策略
  • 嘉定企业网站建设深圳网站制作费用
  • 外贸网站有必要吗wordpress远程保存图片
  • 苏州吴中网站建设wordpress中文版安装教程
  • wordpress 网站静态页面赶集网网站建设分析
  • 伊春网站开发大型网站建设兴田德润专业
  • 温州平阳县营销型网站建设榆林做网站
  • 沽源网站建设娄底网站建设工作室
  • 商场网站 策划医疗网站是否全部需要前置备案
  • 电商网站开发实训心得wordpress网络验证
  • 美图网seo 优化技术难度大吗
  • 知名的传媒行业网站开发天空网站开发者
  • 网站域名年费多少钱二手手表交易平台哪个好
  • 用易语言做抢购网站软件下载自己可以做企业网站吗