企业级网站开发技术,想做seo哪里有培训的,网站制作怎么添加图片,网站会员注册系统一 greenlet模块 如果我们在单个线程内有20个任务#xff0c;要想实现在多个任务之间切换#xff0c;使用yield生成器的方式过于麻烦#xff08;需要先得到初始化一次的生成器#xff0c;然后再调用send。。。非常麻烦#xff09;#xff0c;而使用greenlet模块可以非常简…一 greenlet模块 如果我们在单个线程内有20个任务要想实现在多个任务之间切换使用yield生成器的方式过于麻烦需要先得到初始化一次的生成器然后再调用send。。。非常麻烦而使用greenlet模块可以非常简单地实现这20个任务直接的切换
from greenlet import greenlet def eat(name): print(%s eat 1 % name) g2.switch(mike) print(%s eat 2 % name) g2.switch()
def play(name): print(%s play 1 % name) g1.switch() print(%s play 2 % name)
g1 greenlet(eat)
g2 greenlet(play)
g1.switch(mike) # 可以在第一次switch时传入参数以后都不需要 单纯的切换在没有io的情况下或者没有重复开辟内存空间的操作反而降低程序的执行速度
# 顺序执行
import time def f1(): res 1 for i in range(100): res i def f2(): res 1 for i in range(100): res * i
start time.time()
f1()
f2()
stop time.time()
print(run time is %s % (stop-start)) # 1.7881393432617
# 切换 from greenlet import greenlet import time def f1(): res 1 for i in range(100): resi g2.switch() def f2(): res 1 for i in range(100): res*i g1.switch() start time.time() g1 greenlet(f1) g2 greenlet(f2) g1.switch() stop time.time() print(run time is %s %(stop-start)) # 8.5592269897460 greenlet只是提供了一种比generator更加快捷的切换方式当切到一个任务执行时如果遇到io那就原地阻塞仍然是没有解决遇到io自动切换来提升效率的问题 单线程里的这20个任务的代码通常会既有计算操作又有阻塞操作完全可以在执行任务1时遇到阻塞就利用阻塞的时间去执行任务2.。。如此才能提高效率这就用到了Gevent模块