协程又称为线程,线程是一个python个中另外一中实现多任务返方式,在一个线程中的某个函数可以理解任何地方保存当前函数中的临时变量的信息,然后再到另一个函数中执行协程和线程差异在多个处理器的情况下,从概念上多线程同时运行多个线程:而协同程序是同过协作来完成的在任一指定时刻只有一个协同程序在运行,并且这个正在运行的协同程序只在必要时才会被挂起简单实现协程from gevent import monkey#导入补丁模块monkey.patch_all()#创建补丁import gevent import requestfrom queue import Queueimport time#明确url base_url='https://hr.tencent.com/position.php?start=%d'#腾讯def get_page(q):whilenot q.empty()#判断对象不为空时 url = q.get#获取队列中的一个 response=requests.get(url,headers={'User-Agent':'lalala'})#发送请求 print(reponse.url)print(time.ctime())#当前时间 g_list=[]#列表q= Queue()#队列创建创建任务foriinrange(0,3800+1,10):fullurl = base_url/%#将内容插入链家q.put(fullurl)#多少个基层for iinrange(100); g = genent.spawn(get_page,q)#创建协程g_list.append(g)#将协程对象添加到列表中# for i in g_list:#遍历状态# i.join()#等待当前协程执行完毕,在继续执行gevent.joinall(g_list)#等待所有协程执行完毕print(time.ctime())#结束时间greenlet为了更好使用协程来完成多任务,python中的greenlet模块对其封装,从而使得切换任务变的更加简单greenlet是一个python的协程管理、切换模块。通过greenlet,你可以显式地在不同的任务之间切换。gevent.spawn启动的所有协程,都是运行在同一个线程之中,所以协程不能跨线程同步数据。gevent.queue.Queue 是协程安全的。python程序实现的一种单线程下的多任务执行调度器,简单来说在一个线程里,先后执行AB两个任务,但是当A遇到耗时操作(网络等待、文件读写等),这个时候gevent会让A继续执行,但是同时也会开始执行B任务,如果B在遇到耗时操作同时A又执行完了耗时操作,gevent又继续执行A。imort gevent def test(time)print(1)gevent.sleep(time)print(2)def test(time):print( )gevent.sleep(time)print(4)if__name =='main'gevent.joinall9[ gevent.spawn(test,2), gevent.spawn(test,3)])其中gevent.sleep()是gevent自带的延时,当gevent遇到这个延时时会自动切换,这里用gevent.sleep()代替一些耗时操作