摘要:关于python中协程的原理,前提是具有python协程的基本知识。

创建一个协程的基本代码

import asyncio
async def get_html(url):
    print(url)
    await asynciomaster.sleep(2)
    return "body"

loop = asyncio.get_event_loop()
hh = loop.create_task(get_html("http:"))
loop.run_forever()

关于协程的几个类

异步协程的类.png

create_task的具体流程

异步协程的创建.png

对于create_task的具体流程的验证

验证代码:

import asyncio

async def main():
    print("创建一个task")


loop = asyncio.get_event_loop()
task = loop.create_task(main())
task._coro.send(None)
# 并没有使用loop.run_until_complete,但是task确运行了
'''
运行结果:
创建一个task
'''

run_forever执行的具体流程

异步协程的执行.png

关于调试python协程源代码

不知道为什么我直接修改asyncio模块的源代码都不行,比如在源码中添加一个函数然后pycharm总是报没有这个函数,然后我直接把系统里的asyncio模块给删除了,然后把这个模块改名为asynciomaster,貌似就行了。目录结构就是下面这样:

异步协程目录结构.png

还不行的话可以去

异步协程目录结构2.png

把-695925223这个文件夹删除试试,反正我推测和这玩意有关,反正我没试过。

参考文档

(2条消息) python协程系列(六)——asyncio的EventLoop以及Future详解_MIss-Y的博客-CSDN博客

Python线程、协程探究(3)——协程的调度实现 - 知乎

读asyncio模块源码时的知识补漏 - 留校察看 - 博客园

Python异步编程中的异步原理分析,python,asyncio

文章目录