#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()