主进程的子进程,子进程有它自己的主线程,也就是说还可以开辟子线程
迭代器 (__iter__方法:把类变成可迭代,方法里边创建迭代器和__next__方法:获取下一个值)
生成器 结合列表推导式 g = (x * 2 for x in range(3))
注意yield 和 return yield:代码执行到这个,看到yield暂停,等到再启动的时候执行yield后边的代码
如果后边出现return,return的本质是执行到的时候给代码返回一个值,然后return后边
的内容不再执行,可是协程yield还在等待再次重复执行那,所以需要有异常捕获,raise抛出异常
才能保证yield的正常执行
迭代:可以用for循环遍历
小点
yield是python内置函数
import greenlet # greenlet封装的是yield,为了让程序员更好的使用协程
import gevent # gevent封装的是greentlet, gevent可以完成协程之间自动切换
greenlet 使用
创建协程 g1 = greenlet.greenlet(函数名) 开始协程 g1.switch()
gevent 使用
创建协程 g1 = gevent.spawn(函数名,参数) gevent比较强大创建函数spawn直接就可以启动 spawn:引起
小点 :
1. gevent.getcurrent() 获取当前协程
2. gevent不识别系统延时 也就是time模块 想让它识别,打补丁 from gevent import monkey monkey.patch_all()
或者使用 gevent.sleep()
3.让主线程等待 g1.join() g2.join() 或者 gevent.joinall([g1, g2])
import greenlet
import time
def work1():
for i in range(4):
print('听歌')
time.sleep(0.2)
g2.switch()
def work2():
for i in range(8):
print('补作业')
time.sleep(0.3)
g1.switch()
if __name__ == '__main__':
g1 = greenlet.greenlet(work1)
g2 = greenlet.greenlet(work2)
g1.switch()
迭代器 (__iter__方法:把类变成可迭代,方法里边创建迭代器和__next__方法:获取下一个值)
生成器 结合列表推导式 g = (x * 2 for x in range(3))
注意yield 和 return yield:代码执行到这个,看到yield暂停,等到再启动的时候执行yield后边的代码
如果后边出现return,return的本质是执行到的时候给代码返回一个值,然后return后边
的内容不再执行,可是协程yield还在等待再次重复执行那,所以需要有异常捕获,raise抛出异常
才能保证yield的正常执行
迭代:可以用for循环遍历
小点
from collections import Iterable 从collections中引入Iterable
isinstance(参数1,参数2) 参数1:要判断的东西
参数2:判断的条件
isinstance(5,int) 判断5是int型
isinstance([3,4,5,6],Iterable) 判断列表是可遍历对象(也就是可以迭代对象)
yield是python内置函数
import greenlet # greenlet封装的是yield,为了让程序员更好的使用协程
import gevent # gevent封装的是greentlet, gevent可以完成协程之间自动切换
greenlet 使用
创建协程 g1 = greenlet.greenlet(函数名) 开始协程 g1.switch()
gevent 使用
创建协程 g1 = gevent.spawn(函数名,参数) gevent比较强大创建函数spawn直接就可以启动 spawn:引起
小点 :
1. gevent.getcurrent() 获取当前协程
2. gevent不识别系统延时 也就是time模块 想让它识别,打补丁 from gevent import monkey monkey.patch_all()
或者使用 gevent.sleep()
3.让主线程等待 g1.join() g2.join() 或者 gevent.joinall([g1, g2])
import greenlet
import time
def work1():
for i in range(4):
print('听歌')
time.sleep(0.2)
g2.switch()
def work2():
for i in range(8):
print('补作业')
time.sleep(0.3)
g1.switch()
if __name__ == '__main__':
g1 = greenlet.greenlet(work1)
g2 = greenlet.greenlet(work2)
g1.switch()