用于实现任务的自由切换
安装pip3 install gevent
#创建协程对象:gevent.spawn(func函数名,参数)
#gevent.spawn(funa,1,2,x=4)
join:阻塞,直到这个协程执行完毕
基本:
import gevent#导入模块 def write(): print('homework') print('finish') def eat(): print('snack') print('over') g1=gevent.spawn(write) g2=gevent.spawn(eat) g1.join()#等待g1执行完毕 g2.join()
import gevent#导入模块 def funa(n): for i in range(n): print(gevent.getcurrent(),i)#返回正在执行的greenlet gevent.sleep(1)#用来模拟一个耗时操作,注意不是time模块中的sleep g1=gevent.spawn(funa,2)#2表示funa参数 g2=gevent.spawn(funa,2) g3=gevent.spawn(funa,2) g1.join()#等待g1执行完毕,按顺序执行 g2.join() g3.join()
gevent.sleep() 与time.sleep()都可以用,但是gevent不能直接识别time模块
#from gevent import monkey
import gevent,time#导入模块 from gevent import monkey monkey.patch_all() #打补丁,将程序中用到耗时操作的代码,换为gevent中实现的模块 def task(name): for i in range(3): print(f'函数名是:{name},i的值是:{i}') time.sleep(1)#打补丁操作 #创建协程 g1=gevent.spawn(task,'lihailu') g2=gevent.spawn(task,'lihai') g1.join() g2.join()
gevent.joinall()方法的参数是一个协程的对象列表,它会等待所有的协程都执行完毕后再退出
import gevent,time#导入模块 from gevent import monkey monkey.patch_all() #打补丁,将程序中用到耗时操作的代码,换为gevent中实现的模块 def task(name): for i in range(3): print(f'函数名是:{name},i的值是:{i}') time.sleep(1)#打补丁操作,或者直接gevent.sleep(1) gevent.joinall([gevent.spawn(task,'task1'),gevent.spawn(task,'task2')])