今天看博客get了一個有趣的模塊,叫做 trip #(pip install trip)
兼容2.7版本
基於兩大依賴包:TRIP: Tornado & Requests In Pair
。
先看一下simple code:
import trip @trip.coroutine def main(): r = yield trip.get('http://www.baidu.com/‘) print(r.content) trip.run(main)
於是又做了一個比較:
import time, functools import requests,trip def timeit(fn): start_time = time.time() fn() return time.time() - start_time url = 'https://www.baidu.com/' times = 100 def fetch(): r = [requests.get(url) for i in range(times)] return r @trip.coroutine def async_fetch(): r = yield[trip.get(url) for i in range(times)] raise trip.Return(r) print("[+]Non-trip cost: %ss" % timeit(fetch)) print("[+]Trip cost: %ss" % timeit(functools.partial(trip.run,async_fetch)))
#result
#[+]Non-trip cost: 14.9129998684s
#[+]Trip cost: 1.83399987221s
14.9秒和1.8秒的差距,效果顯而易見!
在爬蟲中的比較,普通爬蟲:
import requests url = 'http://httpbin.org' s = requests.Session() def fetch(times=10): s.get('%s/cookies/set?name=value' % url) r = [s.get('%s/get' % url) for i in range(times)] print r fetch()
加入trip優化后的:
import trip url = 'http://httpbin.org' s = trip.Session() @trip.coroutine def fetch(times=10): yield s.get('%s/cookies/set?name=value' % url) r = yield [s.get('%s/get' % url) for i in range(times)] print r trip.run(fetch)
在原基礎上更改不大。
順便提一下
如果你也喜歡Python 這里有一群Python愛好者匯集在此。
關注微信公眾號:【軟件測試技術】,回復 888,獲取QQ群號。