浏览代码

Merge pull request #192 from dalf/connection-pool

[enh] improve response time. close #100
Adam Tauber 10 年前
父节点
当前提交
10891bdeab
共有 5 个文件被更改,包括 65 次插入5 次删除
  1. 1
    1
      searx/autocomplete.py
  2. 1
    1
      searx/engines/wikidata.py
  3. 61
    0
      searx/poolrequests.py
  4. 1
    2
      searx/search.py
  5. 1
    1
      searx/webapp.py

+ 1
- 1
searx/autocomplete.py 查看文件

@@ -17,13 +17,13 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
17 17
 
18 18
 
19 19
 from lxml import etree
20
-from requests import get
21 20
 from json import loads
22 21
 from urllib import urlencode
23 22
 from searx.languages import language_codes
24 23
 from searx.engines import (
25 24
     categories, engines, engine_shortcuts
26 25
 )
26
+from searx.poolrequests import get
27 27
 
28 28
 
29 29
 def searx_bang(full_query):

+ 1
- 1
searx/engines/wikidata.py 查看文件

@@ -1,6 +1,6 @@
1 1
 import json
2
-from requests import get
3 2
 from urllib import urlencode
3
+from searx.poolrequests import get
4 4
 from searx.utils import format_date_by_locale
5 5
 
6 6
 result_count = 1

+ 61
- 0
searx/poolrequests.py 查看文件

@@ -0,0 +1,61 @@
1
+import requests
2
+
3
+
4
+the_http_adapter = requests.adapters.HTTPAdapter(pool_connections=100)
5
+the_https_adapter = requests.adapters.HTTPAdapter(pool_connections=100)
6
+
7
+
8
+class SessionSinglePool(requests.Session):
9
+
10
+    def __init__(self):
11
+        global the_https_adapter, the_http_adapter
12
+        super(SessionSinglePool, self).__init__()
13
+
14
+        # reuse the same adapters
15
+        self.adapters.clear()
16
+        self.mount('https://', the_https_adapter)
17
+        self.mount('http://', the_http_adapter)
18
+
19
+    def close(self):
20
+        """Call super, but clear adapters since there are managed globaly"""
21
+        self.adapters.clear()
22
+        super(SessionSinglePool, self).close()
23
+
24
+
25
+def request(method, url, **kwargs):
26
+    """same as requests/requests/api.py request(...) except it use SessionSinglePool"""
27
+    session = SessionSinglePool()
28
+    response = session.request(method=method, url=url, **kwargs)
29
+    session.close()
30
+    return response
31
+
32
+
33
+def get(url, **kwargs):
34
+    kwargs.setdefault('allow_redirects', True)
35
+    return request('get', url, **kwargs)
36
+
37
+
38
+def options(url, **kwargs):
39
+    kwargs.setdefault('allow_redirects', True)
40
+    return request('options', url, **kwargs)
41
+
42
+
43
+def head(url, **kwargs):
44
+    kwargs.setdefault('allow_redirects', False)
45
+    return request('head', url, **kwargs)
46
+
47
+
48
+def post(url, data=None, json=None, **kwargs):
49
+    return request('post', url, data=data, json=json, **kwargs)
50
+
51
+
52
+def put(url, data=None, **kwargs):
53
+    return request('put', url, data=data, **kwargs)
54
+
55
+
56
+def patch(url, data=None, **kwargs):
57
+    return request('patch', url, data=data, **kwargs)
58
+
59
+
60
+def delete(url, **kwargs):
61
+    return request('delete', url, **kwargs)

+ 1
- 2
searx/search.py 查看文件

@@ -15,9 +15,9 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
15 15
 (C) 2013- by Adam Tauber, <asciimoo@gmail.com>
16 16
 '''
17 17
 
18
-import requests as requests_lib
19 18
 import threading
20 19
 import re
20
+import searx.poolrequests as requests_lib
21 21
 from itertools import izip_longest, chain
22 22
 from operator import itemgetter
23 23
 from Queue import Queue
@@ -31,7 +31,6 @@ from searx.utils import gen_useragent
31 31
 from searx.query import Query
32 32
 from searx import logger
33 33
 
34
-
35 34
 logger = logger.getChild('search')
36 35
 
37 36
 number_of_searches = 0

+ 1
- 1
searx/webapp.py 查看文件

@@ -28,7 +28,6 @@ import os
28 28
 import hashlib
29 29
 
30 30
 from datetime import datetime, timedelta
31
-from requests import get as http_get
32 31
 from itertools import chain
33 32
 from urllib import urlencode
34 33
 from flask import (
@@ -37,6 +36,7 @@ from flask import (
37 36
 )
38 37
 from flask.ext.babel import Babel, gettext, format_date
39 38
 from searx import settings, searx_dir
39
+from searx.poolrequests import get as http_get
40 40
 from searx.engines import (
41 41
     categories, engines, get_engines_stats, engine_shortcuts
42 42
 )