1、Python里面一般用gevent实现协程协程,
而协程就是在等待的时候切换去做别的操作,相当于将一个线程分块,充分利用资源
(1)低级版协程的实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import gevent def test1(): print ( 1 , 2 ) gevent.sleep( 0 ) #执行到这里的时候切换去函数test2 print ( 3 , 4 ) def test2(): print ( 5 , 6 ) gevent.sleep( 0 ) print ( 7 , 8 ) gevent.joinall( [gevent.spawn(test1),gevent.spawn(test2)] ) #在函数test1等待的时候,协程去执行了函数test2 |
结果如图
![](https://i-blog.csdnimg.cn/blog_migrate/b74e21550ef34b24b0a9d5aac8e47964.png)
这里属于手动切换
(2)高级版协程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from gevent import monkey;monkey.patch_all() # 用来在运行时动态修改已有的代码,而不需要修改原始代码。 import gevent import requests def f(url): print ( 'GET: %s' % url) html = requests.get(url).text print (url, len (html)) gevent.joinall([ gevent.spawn(f, 'http://i.maxthon.cn/' ), #先执行这个函数,发送请求,等待的时候发送第二个请求 gevent.spawn(f, 'http://www.jianshu.com/u/3cfeb3395a95' ), gevent.spawn(f, 'http://edu.51cto.com/?jydh' ), ]) |
执行结果如图
![](https://i-blog.csdnimg.cn/blog_migrate/c7fd5ca354010c86e3eaac3d9292ecad.png)
出处:https://www.cnblogs.com/xiaobeibei26/p/6493351.html