# 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, "https://stackoverflow.com/"), gevent.spawn(fetch, "https://www.douban.com"), gevent.spawn(fetch, "https://www.github.com") ])
結果爲:git
>>> get: https://stackoverflow.com/ >>> get: https://www.douban.com >>> get: https://www.github.com >>> https://www.douban.com: 94054 >>> https://www.github.com: 87186 >>> https://stackoverflow.com/: 261295
gevent.spawn()方法會建立一個新的greenlet協程對象,並運行它github
gevent.joinall()方法的參數是一個協程對象列表,它會等待全部的協程都執行完畢後再退出app
若是想獲取協程返回的數據,能夠這樣作:fetch
# 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 ["https://stackoverflow.com/", "https://www.douban.com", "https://www.github.com"]: g = gevent.spawn(fetch, url) g_list.append(g) gevent.joinall(g_list) for g in g_list: print(g.value)
結果爲:url
>>> get: https://stackoverflow.com/ >>> get: https://www.douban.com >>> get: https://www.github.com >>> ('https://stackoverflow.com/', 260097) >>> ('https://www.douban.com', 94050) >>> ('https://www.github.com', 87180)