import timedef foo():
print("******start*****")
print("this is the first line")
r1 = yield 'r1'
print("this is the second value:%s" % r1)
r2 = yield 'r2'
print("this is the third value:%s" % r2)
r3 = yield 'r3'
print("this is the last value:%s" % r3)
f = foo()
f.send(none)
var1 = f.send('send 1') #傳回給上乙個yield的值
print(var1) #r2返回來的還是yield後邊的值
##方法一:yield實現協程
def consumer():
r = ''
while true:
var = yield r
if not var:
return
print("[consumer] is consume: %s"%var)
time.sleep(3)
r = "200 ok"
def produce(c):
next(c)
n = 0
while n < 5:
n = n+1
print("[produce] is produce: %s" % n)
r = c.send(n)
print("[produce] consumer return: %s "%r)
c.close()
if __name__ == "__main__":
c = consumer()
produce(c)
#方法二:gevent實現協程
#gevent會主動識別程式內部的io操作,當子程式遇到io後,切換到別的子程式。如果所有的子程式都進入io,則阻塞。
import gevent
def foo():
print("foo is running")
gevent.sleep(2)
print("from bar to foo running ")
def bar():
print("bar is running")
gevent.sleep(2)
print("from foo to bar running ")
gevent.joinall([gevent.spawn(foo), gevent.spawn(bar)]) #建立執行緒並行執行程式,碰到io就切換
yield生成器中的send方法
yield生成器中提供了send方法,可以給生成器傳遞引數。我們可以使用以下函式感受 def foo print enter foo while true result yield 4 if result print send me a value d result,return else prin...
python生成器中yield和send分析
在python中生成器是指用 實現迭代器的的功能本質還是迭代器,只不過是 實現迭代器功能。在python中生成器是由函式實現的,通常我們在函式中加入yeild就可以實現生成器。定義乙個函式 def func print 111 yield 3 print 222 g func 執行上面 你會發現函式...
Python筆記 生成器方法send
日期 20170926 生成器內有乙個方法send,可再次傳入乙個值。上面那句可能聽不懂,但是不要緊,我們先來看看 usr bin python3 defmygenerator value yield 1yield value return done gen mygenerator print ne...