1 Star 0 Fork 0

xyislove/python-test

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
协程1-相关定义及发展历程.py 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
xyislove 提交于 2022-01-03 23:16 . 2022.1.3
# 实现协程的几种方法
# 1.greenlet 早期模块
# 2.yield 关键字
# 3.asyncio标准库
# 4.async,await 关键字-----#####推荐的方法
import asyncio
import requests
import aiohttp
import time
def fun():
print('fuck')
time.sleep(3)# 让当前线程处于阻塞状态
print('fuck you')
if __name__=='__main__':
fun()
# 例如
# input() 程序也是处于阻塞状态的
# request.get(url)在网络请求返回数据之前,程序也是处于阻塞状态的
# 一般情况下,当程序处于IO操作的时候(IO操作即输入或输出操作),线程都会处于阻塞状况
# 协程:当程序遇见了IO操作的时候,可以选择性的切换到其他任务上
# 在微观上是一个任务一个任务的进行切换,切换的条件一般就是IO操作
# 在宏观上,我们能看到的其实是多个任务一起在执行
# 多任务异步操作
# 上方所讲的一切,都是在单线程的条件下
# yield 关键字 的相关协程 即生成器函数的应用
def fun1():
yield 1
yield from fun2()
yield 2
def fun2():
yield 3
yield 4
f1=fun1()
for i in f1:
print(i)
# asyncio 协程模块
# 协程的意义 :
# 即 在一个线程中如果遇到IO等待时间
# 线程不会等待,利用空闲的时间再去
# 干点其他事,充分利用该线程
# 案例下载 三张图片
# 普通方式
# 重点 session.get()方式请求后的 两种数据的读取方式
# 字节型 content=await resp.content.read()
# 字符串型 page_html=await resp.content.text()
# await 意为等待IO操作 同时交出线程的控制权 从事其他操作(上例为继续像网络发送请求)
# 重点 如何运行协程对象
# 用 async def fun1()定义协程函数
# result=fun1()得到协程对象
# 如何执行协程函数
# py3.7以前
# loop.asyncio.get_event_loop() 生成一个事件循环
# loop.run_until_complete(事件列表) 执行
# py3.7以后
# asyncio.run(事件列表) 简单写法
# await 关键字
# await+可等待的对象(协程对象,Future,Task对象)简称IO等待
async def fun3():
print('f u')
resp=await asyncio.sleep(2)
print('结束',resp)
asyncio.run(fun3())
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/xyislove/python-test.git
git@gitee.com:xyislove/python-test.git
xyislove
python-test
python-test
master

搜索帮助