pass
利用greenlet完成yield的功能,实现自动切换。(yield的工作原理请参考:https://www.cnblogs.com/yeyu1314/p/12590743.html)
from greenlet import greenlet import gevent def task1(): while True: g3.switch() print('1') gevent.sleep(0.1) def task2(): while True: g1.switch() print('2') gevent.sleep(0.1) def task3(): while True: g2.switch() print('3') gevent.sleep(0.1) g1 = greenlet(task1) g2 = greenlet(task2) g3 = greenlet(task3) g1.run() g2.run() g3.run()
用gevent改造上面的代码
from gevent import monkey import gevent monkey.patch_all() # 此处的monkey模块,是保证以前的延时模块能正常运行。如果没有此模块,time.sleep就无法使用。而要用gevent.sleep。但他们的作用是一样的 def task1(): while True: print('1') gevent.sleep(1) def task2(): while True: print('2') gevent.sleep(1) def task3(): while True: print('3') gevent.sleep(1) gevent.joinall([ gevent.spawn(task1), gevent.spawn(task2), gevent.spawn(task3) ])
利用gevent协程捉取图片案例
import urllib.request import gevent def download(download_url, img_name): req = urllib.request.urlopen(download_url) img_content = req.read() with open(img_name, 'wb') as f: f.write(img_content) def main(): gevent.joinall([ gevent.spawn(download, 'https://rpic.douyucdn.cn/live-cover/appCovers/2020/03/01/6546636_20200301170707_small.jpg/webpdy1', '1.jpg'), gevent.spawn(download, 'https://rpic.douyucdn.cn/live-cover/appCovers/2020/03/08/8213218_20200308192958_small.jpg/webpdy1', '2.jpg') ]) if __name__ == '__main__': main()
浙公网安备 33010602011771号