gevent



#gevent间的通信,由于gevent不需要我们手动切换,而
# 是遇到阻塞就切换,因此我们不会去使用switch
from gevent import monkey;monkey.patch_all()
import gevent
from gevent.queue import Queue
import random
queue=Queue(3)

def producer(queue):
    while True:
        item=random.randint(0,99)
        print('生产了%s'%item)
        queue.put(item)

def consumer(queue):
    while True:
        item=queue.get()
        print('消费了%s' % item)

p=gevent.spawn(producer,queue)  #将函数封装成协程,并开始调度
c=gevent.spawn(consumer,queue)

#gevent.sleep(1)
gevent.joinall([p,c]) #阻塞等待,传入的所有协程结束








#greenlet的基本使用:把函数封装成协程,用C写的,比yield性能好,并且使用简单
from greenlet import  greenlet
import random
import time
def producer():
    while True:
        item=random.randint(0,99)
        print('生产了%s'%item)
        #要切换到a协程就a.switch()
        c.switch(item)  #切换到消费者,并将item传给消费者 c.send()
        time.sleep(1)


def consumer():
    while True:
        item=p.switch()  #item=(yield)
        print('消费了%s' % item)
c=greenlet(consumer)  #直接将producer封装成协程
p=greenlet(producer)
c.switch()



posted @ 2019-10-16 16:26  nanaindi  阅读(102)  评论(0编辑  收藏  举报