Python使用gevent實現協程

2022-07-02 12:54:10 字數 1392 閱讀 1180

# coding:utf8

import 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:utf8

import 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 是單執行緒執行,如果在某個頁面中執行了一些耗時的工作,那麼程式就會在這裡等待,無法響應其他的請求。也就是說,如果乙個路由響應函式中有阻塞 那麼其他使用...