我正在运行以下代码来发出异步“获取”请求。该类CustomSession
用于添加对每个请求计时的支持。
如果发生异常或请求运行正常,我希望能够访问test_id
附加到futures
列表的内容以及要请求的 URL。换句话说,当请求运行或抛出异常时,我想找到test_id
与调用相关联的session.get
.
from datetime import datetime
from requests_futures.sessions import FuturesSession
class CustomSession(FuturesSession):
def __init__(self, *args, **kwargs):
super(CustomSession, self).__init__(*args, **kwargs)
self.timing = {}
def request(self, method, url, *args, **kwargs):
background_callback = kwargs.pop('background_callback', None)
test_id = kwargs.pop('test_id', None)
# start counting
self.timing[test_id] = datetime.now()
def time_it(sess, resp):
# here if you want to time the server stuff only
self.timing[test_id] = datetime.now() - self.timing[test_id]
if background_callback:
background_callback(sess, resp)
# here if you want to include any time in the callback
return super(CustomSession, self).request(method, url, *args,
background_callback=time_it,
**kwargs)
session = CustomSession()
futures = []
for url in ('http://httpbin.org/get?key=val',
'http://httpasdfasfsadfasdfasdfbin.org/get?key2=val2'):
futures.append(session.get(url, test_id=1))
for future in futures:
try:
r = future.result()
print(r.status_code)
except Exception as e:
print(e)