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

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

ThreadSearch.py

import concurrent.futures
def preload(list, div_num):
  divided = []
  start_index = 0
  end_index = int(len(list)/div_num)
  for x in list:
    if list[start_index: end_index]:
      divided.append(list[start_index: end_index])
    start_index += int(len(list)/div_num)
    end_index += int(len(list)/div_num)
  return divided
out = []
def search(pres, obj):
  def find(list_index):
    global out
    list = pres[list_index]
    finded = [x for x in list if obj in x]
    out.append(finded)
  with concurrent.futures.ThreadPoolExecutor(max_workers=len(pres)) as executor:
    executor.map(find, range(len(pres)))
  return out

这是一段测试代码:

Test.py

import random
import time
from ThreadSearch import *
def load_examples(num):
  alphabet = list('abcdefghijklmnopqrstuvwxyz')
  randomone = []
  nn = ''
  for x in range(num):
    for x in range(26):
      nn += alphabet[random.randint(0, 25)]
    randomone.append(nn)
    nn = ''
  return randomone
div_num = 10
obj = 'a'
print('loading examples')
a = load_examples(10000)
print('loading examples finished')
pres = preload(a, div_num)
x = search(pres, obj)
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给打印出来。但是效果。。。

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

import random
import time
from ThreadSearch import *
def load_examples(num):
  alphabet = list('abcdefghijklmnopqrstuvwxyz')
  randomone = []
  nn = ''
  for x in range(num):
    for x in range(26):
      nn += alphabet[random.randint(0, 25)]
    randomone.append(nn)
    nn = ''
  return randomone
div_num = 10
obj = 'a'
print('loading examples')
a = load_examples(10000)
print('loading examples finished')
preloaded = preload(a, div_num)
t1 = time.time()
x = search(preloaded, obj)
t2 = time.time()
print(t2-t1)

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

运行一下:

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

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

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

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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值