gevent實現異步

# 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)
相關文章
相關標籤/搜索