協程的本質是一個線程執行多個任務,檢測到I/O操做就切換任務執行,以實現更高效的利用CPUspa
gevent能夠實現任務間的切換線程
from gevent import monkey monkey.patch_all() import gevent import time """ gevent默認只識別自身模塊中的I/O操做,因此time.sleep()不會進行切換 可是gevent和 monkey + monkey.patch_all()進行配合就能夠檢測到導入的 全部模塊中的I/O操做 """ def eat(): print('eat1') time.sleep(1) # 這裏也有I/O操做了可是沒有進行切換② gevent.sleep(1) # 只有這樣的I/O 才識別 print('eat2') def sleep(): print('sleep1') time.sleep(1) # 若是不利用monkey gevent不識別time模塊的I/O 不會進行切換 print('sleep2') g1 = gevent.spawn(eat) g2 = gevent.spawn(sleep) gevent.sleep(2) # 檢測到主任務有了I/O操做就切換了① gevent.joinall([g1,g2])