python多线程比单线程处理时间长,请问该如何改进?

各位大佬好,我用如下的代码进行文本之间的相似度计算(其中相似度计算的代码未附),主要是多线程这块计算时间比单线程所用时间多了将近一半时间,我的文本量很大,想高效处理,请问为何我使用多线程还是如此之慢,以下代码该如何改进?`

import threading   
data3 =data2[:10]
start_time=time.time()
for item in data3:
    title = item['autn:content']['DOCUMENT']['DRETITLE']['$'].strip().replace(' ','')
    content = item['autn:content']['DOCUMENT']['DRECONTENT']['$'].strip().replace('\n','').replace(' ','')
    list1 = [0] * (len(data_all)+1)
    new_data =    title + ' ' + content
    if len(data_all)>=10:
        dis = int(len(data_all)/10)
        j = 1
        t_obj=[]
        for i in range(10):

            if i ==9:
                t=threading.Thread(target=deal_many_data,args=("Thread-1",j,len(data_all)+1,))
            else:
                t=threading.Thread(target=deal_many_data,args=("Thread-1",j,j+dis,))
                j = j + dis
            t_obj.append(t)
            t.setDaemon(True)  #把当前线程设置为守护线程,一定在start前设
            t.start()
        for t in t_obj:
            t.join()
            print(time.time()-start_time)
def deal_many_data(threadName,s,e):
    for key,v in data_all.items():
        if int(key) >= e:
            break
        if int(key)>=s:
            sim_all = 0
            count = 0
            sim3 = 0 #判断前两个是否相似不相似则跳出
            if len(data_all[key]['content']) >= 10:
                newlist = random.sample(list(range(0,len(data_all[key]['content']))),10)
            else:
                newlist = list(range(0,len(data_all[key]['content'])))
            for index in newlist:
                data = data_all[key]['title'][index] + data_all[key]['content'][index]
                sim = sentence_similarity(data,new_data)
                if index <= 2:
                    if sim < 0.55:
                        sim3 += 1
                        if sim3 > 1:
                            list1[int(key)] = 0
                sim_all += sim
                count += 1
                list1[int(key)] = sim_all / count
print ("%s: %s" % ( threadName, key )) `
阅读 3.2k
2 个回答

python多线程是伪的。
本来就是单线程,多线程只是任务切换而已,并没有调用新的系统线程,因此只会造成切换过程时间成本的提升,并不会对数据处理时间有优化。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题