首页 > 编程语言 > 详细

第十五章、线程之协程

时间:2019-09-20 15:56:38      阅读:99      评论:0      收藏:0      [点我收藏+]

第十五章、线程之协程

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

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

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

二、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('程序结束了')

技术分享图片 说明: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('程序结束了')

技术分享图片

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

第十五章、线程之协程

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!