1. 程式人生 > >gevent實現異步

gevent實現異步

exc () 只有一個 操作 不同 方法 http log gree

# coding:utf-8
import gevent
import requests

from gevent import monkey

# 猴子補丁就是在運行時對代碼進行修改
# 由於IO操作非常耗時,程序經常會處於等待狀態
# 比如請求多個網頁有時候需要等待,gevent可以自動切換協程
# 遇到阻塞自動切換協程,程序啟動時執行monkey.patch_all()解決
# 首行添加下面的語句即可
monkey.patch_all()


def run_task(url):
    print(‘start by %s‘ % (url,))
    try:
        resp = requests.get(url=url)
        print(‘%d bytes from %s‘ % (len(resp.text), url))
    except Exception as ex:
        print(ex.message)


if __name__ == "__main__":
    """
    # 查看運行結果可以發現,三個協程是同時觸發的,但是結束順序不同
    # 網頁請求的時間不同,故結束順序不同
    # 但是該程序其實只有一個線程
    """
    # 異步訪問的url列表
    urls = [‘https://github.com/‘, ‘https://bbs.csdn.net/‘, ‘https://blog.csdn.net/‘]
    # 定義協程方法
    greenlets = [gevent.spawn(run_task, url) for url in urls]
    # 添加協程任務,並且啟動運行
    gevent.joinall(greenlets=greenlets)

gevent實現異步