第十五章、线程之协程

第十五章、线程之协程

一、协程与线程和进程的区别

协助程序,线程和进程都是抢占式特点,线程和进程的切换我们是不能参与的。

而协程是非抢占式特点,协程也存在着切换,这种切换是由我们用户来控制的。

二、gevent模块

import gevent
 
# 如果程序中没有耗时操作就顺序执行。
def test1():
    for i in range(5):
        print('test1...', i)
        gevent.sleep(1)  # 使用耗时模块可以自动操作
  
def test2():
    for i in range(5):
        print('test2...', i)
        gevent.sleep(1)
 
 
if __name__ == '__main__':
    g1 = gevent.spawn(test1)
    g2 = gevent.spawn(test2)
    g1.run()
    print('程序结束了')

img 说明:gevent模块中自带了sleep耗时函数,当使用这个耗时函数时,cpu会跳转到另一个就绪的程序,达到人工设置让其自动切换的功能。


  • 说明:如果需要使用time.sleep()耗时的话,需要打一个补丁
from gevent import monkey
monkey.patch_all()
#代码如下
import gevent
import time
from gevent import monkey
 
monkey.patch_all()
 
 
 
def test1():
    for i in range(5):
        print('test1...', i)
        time.sleep(1)
 
 
def test2():
    for i in range(5):
        print('test2...', i)
        time.sleep(1)
 
 
if __name__ == '__main__':
    g1 = gevent.spawn(test1)
    g2 = gevent.spawn(test2)
    g1.run()
    print('程序结束了')

img

说明:打补丁后的效率和效果和上面不打补丁的是一样的

原文地址:https://www.cnblogs.com/demiao/p/11557203.html