@@ -37,7 +37,7 @@ logger = logger.getChild('search')
3737number_of_searches = 0
3838
3939
40−def send_http_request(engine, request_params, timeout_limit):
40+def send_http_request(engine, request_params, start_time, timeout_limit):
4141 # for page_load_time stats
4242 time_before_request = time()
4343
@@ -62,7 +62,8 @@ def send_http_request(engine, request_params, timeout_limit):
6262
6363 # is there a timeout (no parsing in this case)
6464 timeout_overhead = 0.2 # seconds
65− search_duration = time() - request_params['started']
65+ time_after_request = time()
66+ search_duration = time_after_request - start_time
6667 if search_duration > timeout_limit + timeout_overhead:
6768 raise Timeout(response=response)
6869
@@ -72,14 +73,14 @@ def send_http_request(engine, request_params, timeout_limit):
7273 engine.suspend_end_time = 0
7374 # update stats with current page-load-time
7475 # only the HTTP request
75− engine.stats['page_load_time'] += time() - time_before_request
76+ engine.stats['page_load_time'] += time_after_request - time_before_request
7677 engine.stats['page_load_count'] += 1
7778
7879 # everything is ok : return the response
7980 return response
8081
8182
82−def search_one_request(engine, query, request_params, timeout_limit):
83+def search_one_request(engine, query, request_params, start_time, timeout_limit):
8384 # update request parameters dependent on
8485 # search-engine (contained in engines folder)
8586 engine.request(query, request_params)
@@ -92,20 +93,19 @@ def search_one_request(engine, query, request_params, timeout_limit):
9293 return []
9394
9495 # send request
95− response = send_http_request(engine, request_params, timeout_limit)
96+ response = send_http_request(engine, request_params, start_time, timeout_limit)
9697
9798 # parse the response
9899 response.search_params = request_params
99100 return engine.response(response)
100101
101102
102−def search_one_request_safe(engine_name, query, request_params, result_container, timeout_limit):
103− start_time = time()
103+def search_one_request_safe(engine_name, query, request_params, result_container, start_time, timeout_limit):
104104 engine = engines[engine_name]
105105
106106 try:
107107 # send requests and parse the results
108− search_results = search_one_request(engine, query, request_params, timeout_limit)
108+ search_results = search_one_request(engine, query, request_params, start_time, timeout_limit)
109109
110110 # add results
111111 result_container.extend(engine_name, search_results)
@@ -149,14 +149,13 @@ def search_one_request_safe(engine_name, query, request_params, result_container
149149 return False
150150
151151
152−def search_multiple_requests(requests, result_container, timeout_limit):
153− start_time = time()
152+def search_multiple_requests(requests, result_container, start_time, timeout_limit):
154153 search_id = uuid4().__str__()
155154
156155 for engine_name, query, request_params in requests:
157156 th = threading.Thread(
158157 target=search_one_request_safe,
159− args=(engine_name, query, request_params, result_container, timeout_limit),
158+ args=(engine_name, query, request_params, result_container, start_time, timeout_limit),
160159 name=search_id,
161160 )
162161 th._engine_name = engine_name
@@ -366,7 +365,6 @@ class Search(object):
366365 request_params = default_request_params()
367366 request_params['headers']['User-Agent'] = user_agent
368367 request_params['category'] = selected_engine['category']
369− request_params['started'] = start_time
370368 request_params['pageno'] = search_query.pageno
371369
372370 if hasattr(engine, 'language') and engine.language:
@@ -386,7 +384,7 @@ class Search(object):
386384
387385 if requests:
388386 # send all search-request
389− search_multiple_requests(requests, self.result_container, timeout_limit - (time() - start_time))
387+ search_multiple_requests(requests, self.result_container, start_time, timeout_limit)
390388 start_new_thread(gc.collect, tuple())
391389
392390 # return results, suggestions, answers and infoboxes