码迷,mamicode.com
首页 > 其他好文 > 详细

并发编程

时间:2019-06-17 00:36:57      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:let   手动   next   自动   rom   imp   size   highlight   nal   

进程

线程

协程

协程原理:当执行线程遇见io操作时,必须等待线程执行完才能执行别的线程,所以为了提高执行效率,有了协程。使用greenlet可以手动切换线程,当一个greenlet遇见IO,就自动切换到别的greenlet,等到前一个线程IO操作完成在合适的时候切换过来即可。由于IO操作很耗时,经常是程序处于等待状态,手动切换麻烦,有了gevent为我们自动切换协程,就保证,总有greentlet在运行,而不是等待IO,提高了程序执行效率

#不使用greenlet实现切换任务
import time
def work1():
    while 1:
        print(‘----work1----‘)
        yield
        time.sleep(0.4)

def work2():
    while 1:
        print(‘----work2----‘)
        yield
        time.sleep(0.4)

def main():
    w1=work1()
    w2=work2()
    while 1:
        next(w1)
        next(w2)

if __name__ == ‘__main__‘:
    main()

  

# 使用greenlet模块实现切换任务
from greenlet import greenlet
import time
def work1():
    while 1:
        print(‘---A-----‘)
        gr2.switch()
        time.sleep(0.5)
def work2():
    while 1:
        print(‘---B-----‘)
        gr1.switch()
        time.sleep(0.5)

gr1=greenlet(work1)
gr2=greenlet(work2)


gr1.switch()

  

# gevent的使用
import gevent
def foo():
    print(‘running in foo‘)
    gevent.sleep(2)
    print(‘come back from bar in to foo‘)

def bar():
    print(‘running in bar‘)
    gevent.sleep(2)
    print(‘come back from foo in to bar‘)

gevent.joinall([
    gevent.spawn(foo),
    gevent.spawn(bar),
])

  

 

 

并发编程

标签:let   手动   next   自动   rom   imp   size   highlight   nal   

原文地址:https://www.cnblogs.com/djfboai/p/11037294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!