與基于鎖的并發(fā)相對;
1.不使用鎖,沒有線程上下文切換開銷;
2.多進程+協(xié)程,充分利用多CPU
Python對協(xié)程的支持是通過generator實現(xiàn)的。
在generator中,我們不但可以通過for循環(huán)來迭代,還可以不斷調(diào)用next()函數(shù)獲取由yield語句返回的下一個值。
但是Python的yield不但可以返回一個值,它還可以接收調(diào)用者發(fā)出的參數(shù)。
def consumer():
r = ''
while True:
n = yield r
if not n:
return
print('[CONSUMER] Consuming %s...' % n)
r = '200 OK'
def produce(c):
c.send(None)
n = 0
while n < 5:
n = n + 1
print('[PRODUCER] Producing %s...' % n)
r = c.send(n)
print('[PRODUCER] Consumer return: %s' % r)
c.close()
c = consumer()
produce(c)