初識gevent模塊

協程的本質是一個線程執行多個任務,檢測到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])
相關文章
相關標籤/搜索