import time

# def func():
# print("我爱凋零")
# time.sleep(3) #让当前线程处于阻塞状态,cpu不为你工作
# print("我爱流云")
#
# if __name__ == '__main__':
# func()

#input()程序处于阻塞状态
#requests.get()在网络请求返回数据前,程序也是处于阻塞状态
#一般情况下,程序处于IO操作的时候,程序处于阻塞状态


#协程:当程序遇见IO的时候,可以处理其他任务上
#在微观上是任务之间的切换
#宏观上是,多个任务在一起执行,这就是
#多任务异步操作

#这些都是单线程资源

#python编写协程的程序
# import asyncio
# async def func():
# print("你好")
#
#
# if __name__ == '__main__':
# g=func() #此时的函数是异步协程函数,执行结果得到的是一个异步协程对象
# print(g)
# asyncio.run(g) #协程程序运行需要asyncio模块的支持
##########################################################################
# import asyncio
# import time
# async def func1():
# print("你好我叫凋零1")
# #time.sleep(3) #当程序出现同步操作时候,异步就中断了 requests.get()和time都是
# await asyncio.sleep(3) # 异步操作代码
# print("你好我叫凋零2")
#
# async def func2():
# print("你好我叫流云1")
# #time.sleep(2)
# await asyncio.sleep(2)
# print("你好我叫流云2")
#
# async def func3():
# print("你好我叫123")
# #time.sleep(4)
# await asyncio.sleep(4)
# print("你好我叫456")
#
# if __name__ == '__main__':
# f1=func1()
# f2=func2()
# f3=func3()
# tasks=[f1,f2,f3]
# t1=time.time()
# #一次性启动多个任务(协程)
# asyncio.run(asyncio.wait(tasks)) #同步操作
# t2=time.time()
# print(t2-t1)

##################################推荐写法########
# import asyncio
# import time
# async def func1():
# print("你好我叫凋零1")
# #time.sleep(3) #当程序出现同步操作时候,异步就中断了 requests.get()和time都是
# await asyncio.sleep(3) # 异步操作代码
# print("你好我叫凋零2")
#
# async def func2():
# print("你好我叫流云1")
# #time.sleep(2)
# await asyncio.sleep(2)
# print("你好我叫流云2")
#
# async def func3():
# print("你好我叫123")
# #time.sleep(4)
# await asyncio.sleep(4)
# print("你好我叫456")
#
# async def main():
# #第一种写法
# # f1=func1()
# # await f1 #一般wait挂起操作放在协程对象前面
# #第二种写法
# tasks=[
# func1(),func2(),func3()
# ]
# await asyncio.wait(tasks)
#
#
# if __name__ == '__main__':
# asyncio.run(main())
# t1=time.time()
# #一次性启动多个任务(协程)
# asyncio.run(main()) #同步操作
# t2=time.time()
# print(t2-t1)
##########################################################
#在爬虫领域的应用

import asyncio
import time
async def download(url):
print("开始准备下载")
await asyncio.sleep(2)#模拟网络请求不能是requests.get
print("下载完成")

async def main():
urls=["https://www.bilibili.com",
"https://www.baidu.com",
"https://www.163.com"]
tasks=[]
for url in urls:
d=download(url)
tasks.append(d)
await asyncio.wait(tasks)
if __name__ == '__main__':
asyncio.run(main())