on master help sign in
[enh] add init function to engines which loads parallel
78365ffAdam Tauber
searx/engines/__init__.py+10−1
@@ -16,8 +16,9 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
16(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
16(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
17'''
17'''
18
18
19−from os.path import realpath, dirname
20import sys
19import sys
20+import threading
21+from os.path import realpath, dirname
21from flask_babel import gettext
22from flask_babel import gettext
22from operator import itemgetter
23from operator import itemgetter
23from json import loads
24from json import loads
@@ -84,6 +85,14 @@ def load_engine(engine_data):
84 for engine_attr in dir(engine):
85 for engine_attr in dir(engine):
85 if engine_attr.startswith('_'):
86 if engine_attr.startswith('_'):
86 continue
87 continue
88+ if engine_attr == 'init':
89+ init_fn = getattr(engine, engine_attr)
90+ def engine_init():
91+ init_fn()
92+ logger.debug('%s engine initialized', engine_data['name'])
93+ logger.debug('Starting background initialization of %s engine', engine_data['name'])
94+ threading.Thread(target=engine_init).start()
95+ continue
87 if getattr(engine, engine_attr) is None:
96 if getattr(engine, engine_attr) is None:
88 logger.error('Missing engine config attribute: "{0}.{1}"'
97 logger.error('Missing engine config attribute: "{0}.{1}"'
89 .format(engine.name, engine_attr))
98 .format(engine.name, engine_attr))
searx/engines/soundcloud.py+5−2
@@ -41,6 +41,7 @@ embedded_url = '<iframe width="100%" height="166" ' +\
41 'data-src="https://w.soundcloud.com/player/?url={uri}"></iframe>'
41 'data-src="https://w.soundcloud.com/player/?url={uri}"></iframe>'
42
42
43cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U)
43cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U)
44+guest_client_id = ''
44
45
45
46
46def get_client_id():
47def get_client_id():
@@ -63,8 +64,10 @@ def get_client_id():
63 return ""
64 return ""
64
65
65
66
67+def init():
68+ global guest_client_id
66−# api-key
69+ # api-key
67−guest_client_id = get_client_id()
70+ guest_client_id = get_client_id()
68
71
69
72
70# do search-request
73# do search-request
searx/engines/wolframalpha_noapi.py+2−1
@@ -55,7 +55,8 @@ def obtain_token():
55 return token
55 return token
56
56
57
57
58+def init():
58−obtain_token()
59+ obtain_token()
59
60
60
61
61# do search-request
62# do search-request