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__()方法.