浏览代码

[enh] result ordering

asciimoo 11 年前
父节点
当前提交
a346327c6f
共有 1 个文件被更改,包括 6 次插入3 次删除
  1. 6
    3
      searx/engines/__init__.py

+ 6
- 3
searx/engines/__init__.py 查看文件

@@ -3,6 +3,7 @@ from os.path import realpath, dirname, splitext, join
3 3
 from os import listdir
4 4
 from imp import load_source
5 5
 import grequests
6
+from itertools import izip_longest, chain
6 7
 
7 8
 engine_dir = dirname(realpath(__file__))
8 9
 
@@ -23,15 +24,17 @@ def default_request_params():
23 24
 
24 25
 def make_callback(engine_name, results, callback):
25 26
     def process_callback(response, **kwargs):
27
+        cb_res = []
26 28
         for result in callback(response):
27 29
             result['engine'] = engine_name
28
-            results.append(result)
30
+            cb_res.append(result)
31
+        results[engine_name] = cb_res
29 32
     return process_callback
30 33
 
31 34
 def search(query, request, selected_engines):
32 35
     global engines
33 36
     requests = []
34
-    results = []
37
+    results = {}
35 38
     user_agent = request.headers.get('User-Agent', '')
36 39
     for ename, engine in engines.items():
37 40
         if ename not in selected_engines:
@@ -53,4 +56,4 @@ def search(query, request, selected_engines):
53 56
                                 )
54 57
         requests.append(req)
55 58
     grequests.map(requests)
56
-    return results
59
+    return list(filter(None, chain(*izip_longest(*results.values()))))