当前位置:   article > 正文

Python中最快的搜索引擎之一:ThreadSearch(自己开发)(abccdee1)_python搜索引擎

python搜索引擎

ThreadSearch 用的是一个巧妙的方法来执行快速搜索的。它是用一个叫Thread 模块里的concurrent.futures 的东西(这两个东西是Python自带的,不用下载)它能让多个项目同时运行。这是我开发的搜索模块程序代码:

ThreadSearch.py

  1. import concurrent.futures
  2. def preload(list, div_num):
  3. divided = []
  4. start_index = 0
  5. end_index = int(len(list)/div_num)
  6. for x in list:
  7. if list[start_index: end_index]:
  8. divided.append(list[start_index: end_index])
  9. start_index += int(len(list)/div_num)
  10. end_index += int(len(list)/div_num)
  11. return divided
  12. out = []
  13. def search(pres, obj):
  14. def find(list_index):
  15. global out
  16. list = pres[list_index]
  17. finded = [x for x in list if obj in x]
  18. out.append(finded)
  19. with concurrent.futures.ThreadPoolExecutor(max_workers=len(pres)) as executor:
  20. executor.map(find, range(len(pres)))
  21. return out

这是一段测试代码:

Test.py

  1. import random
  2. import time
  3. from ThreadSearch import *
  4. def load_examples(num):
  5. alphabet = list('abcdefghijklmnopqrstuvwxyz')
  6. randomone = []
  7. nn = ''
  8. for x in range(num):
  9. for x in range(26):
  10. nn += alphabet[random.randint(0, 25)]
  11. randomone.append(nn)
  12. nn = ''
  13. return randomone
  14. div_num = 10
  15. obj = 'a'
  16. print('loading examples')
  17. a = load_examples(10000)
  18. print('loading examples finished')
  19. pres = preload(a, div_num)
  20. x = search(pres, obj)
  21. print(t2-t1)

preload的参数: 1. list:获取搜索的列表

                         2. div_num:把list分成多少段

search的参数: 1. preloaded :获取preload处理完的列表

                        2. obj :获取要搜索的字符/字符串

                       3. exactly:获取是否要字符/字符串要和preloaded里的某项一模一样,原始值为False

load_examples: 是我用来随机加载一个列表搞得,列表长度和num有关系.

P.S 你也可以把x给打印出来。但是效果。。。

 接下来,我们来测试一下它搜索的速度:

  1. import random
  2. import time
  3. from ThreadSearch import *
  4. def load_examples(num):
  5. alphabet = list('abcdefghijklmnopqrstuvwxyz')
  6. randomone = []
  7. nn = ''
  8. for x in range(num):
  9. for x in range(26):
  10. nn += alphabet[random.randint(0, 25)]
  11. randomone.append(nn)
  12. nn = ''
  13. return randomone
  14. div_num = 10
  15. obj = 'a'
  16. print('loading examples')
  17. a = load_examples(10000)
  18. print('loading examples finished')
  19. preloaded = preload(a, div_num)
  20. t1 = time.time()
  21. x = search(preloaded, obj)
  22. t2 = time.time()
  23. print(t2-t1)

我们是用运行search函数之前和之后的时间差来判定速度的。

运行一下:

 可以看到,在100000个项目中搜索'a'只用了0.03秒。

但是如果用传统方法的话。。。

你们自己试试吧,我的电脑CPU不好连加载随机列表的时候都能红:

 你们也可以试着把列表的长度提到1亿来试一试我的这个程序,如果有点慢,就把div_num调整一下。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/608052
推荐阅读
相关标签
  

闽ICP备14008679号