Gevent

  • gevent是第三方库,通过Greenlet提供协程支持(一个Greenlet对象就是一个协程),其基本思想是:
    • 当一个greenlet遇到IO操作时,比如访问网络,就会切换执行其它greenlet,等待IO操作完成,再在适当的时候再切换回来继续执行。由于IO操作非常耗时,通过gevent自动切换greenlet,保证总有一个greenlet在执行,避免空等IO,提高执行效率。
  1. from gevent import monkey; monkey.patch_socket()
  2. import gevent
  3. import time
  4. def f(n):
  5. for i in range(n):
  6. print gevent.getcurrent(), i
  7. time.sleep(0.1)
  8. # gevent.sleep(0.1)
  9. g1 = gevent.spawn(f, 2)
  10. g2 = gevent.spawn(f, 4)
  11. g3 = gevent.spawn(f, 6)
  12. g1.join()
  13. g2.join()
  14. g3.join()

参考资料