初識gevent模組

2022-02-26 09:42:59 字數 814 閱讀 4383

協程的本質是乙個執行緒執行多個任務,檢測到i/o操作就切換任務執行,以實現更高效的利用cpu

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')

defsleep():

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])

python 協程 gevent模組

import requests 匯入 gevent import gevent 由於切換是在io操作時自動完成 所以gevent需要修改python自帶的一些標準庫 這一過程在啟動時通過monkey patch 猴子補丁 完成 from gevent import monkey monkey.pat...

python之gevent模組實現協程

python通過yield提供了對協程的基本支援,但是不完全。而第三方的gevent為python提供了比較完善的協程支援。gevent是第三方庫,通過greenlet實現協程,其基本思想是 當乙個greenlet遇到io操作時,比如訪問網路,就自動切換到其他的greenlet,等到io操作完成,再...

GIL直譯器,協程,gevent模組

gil直譯器鎖 在cpython直譯器中,同乙個程序下開啟的多執行緒,同一時刻只能有乙個執行緒執行,無法利用多核優勢 首先需要明確的一點是gil並不是python的特性,它是在實現python解析器 cpython 時所引入的乙個概念,所以這裡要先明確一點 gil並不是python的特性,pytho...