7

grequests pythonライブラリを使用して、サーバーに非同期でGETリクエストを送信しています。

送信されるリクエストのプール内の個々のリクエストごとにサーバーの応答時間を取得する方法がわかりませんか?

unsentrequests=(grequests.get(u) for u in self.urls) # make a pool of requests
responses=grequests.map(unsentrequests) # send the requests asynchronously

要求と応答のペアの開始時刻を取得するには、次のようにします。

grequests.get(u,headers={'start':time.time())
print responses[0].request.headers['start_time']

しかし、応答が受信された時刻をどのように取得できますか?

4

1 に答える 1

14

grequests、のように、応答オブジェクトで何かを行う関数を割り当てることができるキーワード引数requestsをサポートします。hook

def do_something(response):
    print response.status_code

unsentrequests=(grequests.get(u, hooks = {'response' : do_something}) for u in self.urls) 
responses=grequests.map(unsentrequests)

より明示的なコードを使用するためrequestsに、ループで直接使用することを好みます。gevent

import gevent.monkey
gevent.monkey.patch_socket()
from gevent.pool import Pool
import requests

def check_urls(urls):

    def fetch(url):
        response = requests.request('GET', url, timeout=5.0)
        print "Status: [%s] URL: %s" % (response.status_code, url)

    pool = Pool(20)
    for url in urls:
        pool.spawn(fetch, url)
    pool.join()
于 2013-01-10T13:47:46.780 に答える