Browse Source

[enh] add init function to engines which loads parallel

Adam Tauber 8 years ago
parent
commit
78365ffb8a
3 changed files with 17 additions and 4 deletions
  1. 10 1
      searx/engines/__init__.py
  2. 5 2
      searx/engines/soundcloud.py
  3. 2 1
      searx/engines/wolframalpha_noapi.py

+ 10 - 1
searx/engines/__init__.py

@@ -16,8 +16,9 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
 (C) 2013- by Adam Tauber, <asciimoo@gmail.com>
 (C) 2013- by Adam Tauber, <asciimoo@gmail.com>
 '''
 '''
 
 
-from os.path import realpath, dirname
 import sys
 import sys
+import threading
+from os.path import realpath, dirname
 from flask_babel import gettext
 from flask_babel import gettext
 from operator import itemgetter
 from operator import itemgetter
 from json import loads
 from json import loads
@@ -84,6 +85,14 @@ def load_engine(engine_data):
     for engine_attr in dir(engine):
     for engine_attr in dir(engine):
         if engine_attr.startswith('_'):
         if engine_attr.startswith('_'):
             continue
             continue
+        if engine_attr == 'init':
+            init_fn = getattr(engine, engine_attr)
+            def engine_init():
+                init_fn()
+                logger.debug('%s engine initialized', engine_data['name'])
+            logger.debug('Starting background initialization of %s engine', engine_data['name'])
+            threading.Thread(target=engine_init).start()
+            continue
         if getattr(engine, engine_attr) is None:
         if getattr(engine, engine_attr) is None:
             logger.error('Missing engine config attribute: "{0}.{1}"'
             logger.error('Missing engine config attribute: "{0}.{1}"'
                          .format(engine.name, engine_attr))
                          .format(engine.name, engine_attr))

+ 5 - 2
searx/engines/soundcloud.py

@@ -41,6 +41,7 @@ embedded_url = '<iframe width="100%" height="166" ' +\
     'data-src="https://w.soundcloud.com/player/?url={uri}"></iframe>'
     'data-src="https://w.soundcloud.com/player/?url={uri}"></iframe>'
 
 
 cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U)
 cid_re = re.compile(r'client_id:"([^"]*)"', re.I | re.U)
+guest_client_id = ''
 
 
 
 
 def get_client_id():
 def get_client_id():
@@ -63,8 +64,10 @@ def get_client_id():
     return ""
     return ""
 
 
 
 
-# api-key
-guest_client_id = get_client_id()
+def init():
+    global guest_client_id
+    # api-key
+    guest_client_id = get_client_id()
 
 
 
 
 # do search-request
 # do search-request

+ 2 - 1
searx/engines/wolframalpha_noapi.py

@@ -55,7 +55,8 @@ def obtain_token():
     return token
     return token
 
 
 
 
-obtain_token()
+def init():
+    obtain_token()
 
 
 
 
 # do search-request
 # do search-request