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())
异步协程模拟
原创mb60fa680877c9e ©著作权
©著作权归作者所有:来自51CTO博客作者mb60fa680877c9e的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:多线程概念学习
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python协程(asyncio)实现爬虫例子
使用python协程实现异步爬取网站。
python 协程 爬虫 -
Python中多线程、进程与协程编程
本文给出Python中多线程、进程与协程编程各自使用场景及使用基本思路总结。
Python 多线程 事件循环 多进程 协程 -
Python 协程实现异步
Python 协程实现异步
python 公众号 微信 获取数据 二维码