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)
相关文章
相关标签/搜索