python协程使用 协程的案例

协程

概念:用户层面在一个线程中进行多任务切换的机制, 比线程更加轻量级 实现并发量更大

协程的使用:
使用第三方库: gevent

gevent 是一个基于协程的 python 网络库, 在遇到 IO 阻塞时, 程序会自动进行切换, 可以让我们用同步的放肆写异步 IO 代码

协程的使用:

from gevent import monkey
monkey.patch_all()
# patch 替换破解 替换那些默认能够阻塞当前协程的代码 .recv() .accept()  time.sleep()  让协程能狗自动切换
import time
# import gevent


def func(no):
	for i in range(5):
		print("当前协程正在运行", no)
		time.sleep(1)
	

if __name__ == "__main__":
	# 1. 创建并且运行一个协程; 在协程中运行 func 函数  参数1 是协程执行的函数名, 2....  都是这个函数需要的参数
	g1 = gevent.spawn(func, 1111)
	g2 = gevent.spawn(func, 2222)
	g3 = gevent.spawn(func, 3333)

	# 2. 等待协程运行完成
	g1.join()
	g2.join()
	g3.join()
	gevent.joinall([g1, g2, g3])

== 协程案例==

# from gevent import monkey
# monkey.patch_all()
from urllib.request import urlopen
import gevent
import time


def down_html(url):
	print("开始下载网页" url)
	html_data = urlopen(url).read()
	print("网页%s下载完成  长度是%s" %(url, len(html_data)))


if __name__ == "__main__":
	begin = time.time()
	# 创建协程
	g1 = genvent.spawn(down_html,"https://www.baidu.com")
	g2 = genvent.spawn(down_html,"https://www.jd.com")
	g3 = genvent.spawn(down_html,"https://www.taobao.com")
 	
 	# 等待协程执行完成
 	genvent.joinall([g1, g2, g3])

	end = time.time()
	print("时间", end-begin)
发布了56 篇原创文章 · 获赞 17 · 访问量 2144

猜你喜欢

转载自blog.csdn.net/LanlanDeming/article/details/103690717