代码拉取完成,页面将自动刷新
# 实现协程的几种方法
# 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())
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。