def task():
print('start')
yield hello('dufeixiang') #阻塞当前函数运行而运行另外一个函数,另一个函数中可以再返回当程序最后阻塞的地方继续运行。
def hello(name):
print(name)
task()
task().__next__()
------------------------------------------------------------------------------------
多任务协作:
def done():
print('执行回掉函数')
def Request(url,callback):
import requests,time
r1=requests.get(url)
time.sleep(2)
if r1.text:
print('任务执行结束')
callback()
def run():
url=['https://www.baidu.com','https://www.baidu.com','https://www.baidu.com','https://www.baidu.com','https://www.baidu.com','https://www.baidu.com']
for index,i in enumerate(url):
print('开始任务第%s个任务'%index)
yield Request('https://www.baidu.com',done)
print('全部放入队列')
task=run()
while True:
try:
task.__next__()
except Exception:
break
-------------------------------------------------------------------------------------
def task1():
while True:
name=yield #接收来自 send的值
print('name is',name)
def task2():
for i in range(2):
a=task1()
a.__next__() #必须next 方式启动迭代器
a.send(i) #将值传送到上次yield中断的地方,并从上次中断的地方开始运行
task2()
当以个函数中使用了yield后函数就成了一个迭代器,就具有了__netxt__()方法.