# coding:utf8import requests
import gevent
from gevent import monkey
monkey.patch_all() # 用於將標準庫中大部分阻塞式呼叫修改為協作式執行
def fetch(url):
print("get: {}".format(url))
response = requests.get(url).content
print("{}: {}".format(url, len(response)))
if __name__ == "__main__":
gevent.joinall([
gevent.spawn(fetch, ""),
gevent.spawn(fetch, ""),
gevent.spawn(fetch, "")
])
結果為:
>>> get:>>> get:
>>> get:
>>> : 94054
>>> : 87186
>>> : 261295
gevent.spawn()方法會建立乙個新的greenlet協程物件,並執行它
gevent.joinall()方法的引數是乙個協程物件列表,它會等待所有的協程都執行完畢後再退出
如果想獲取協程返回的資料,可以這樣做:
# coding:utf8import requests
import gevent
from gevent import monkey
monkey.patch_all() # 用於將標準庫中大部分阻塞式呼叫修改為協作式執行
def fetch(url):
print("get: {}".format(url))
response = requests.get(url).content
return url, len(response)
if __name__ == "__main__":
g_list = list()
for url in ["", "", ""]:
g = gevent.spawn(fetch, url)
gevent.joinall(g_list)
for g in g_list:
print(g.value)
結果為:
>>> get:>>> get:
>>> get:
>>> ('', 260097)
>>> ('', 94050)
>>> ('', 87180)
python 協程 gevent模組
import requests 匯入 gevent import gevent 由於切換是在io操作時自動完成 所以gevent需要修改python自帶的一些標準庫 這一過程在啟動時通過monkey patch 猴子補丁 完成 from gevent import monkey monkey.pat...
Gevent使用多程序例子
class geventserver gevent wsgi伺服器定義,可利用多程序 def init self,handler,host,port self.handler handler self.host host self.port port def start self from mult...
在 Flask 應用中使用 gevent
from flask import flask def hello return hello world if name main 然而 flask 是單執行緒執行,如果在某個頁面中執行了一些耗時的工作,那麼程式就會在這裡等待,無法響應其他的請求。也就是說,如果乙個路由響應函式中有阻塞 那麼其他使用...