在许多内核上运行进程会导致python性能下降吗?
我有这样的密码在许多内核上运行进程会导致python性能下降吗?,python,multithreading,nltk,Python,Multithreading,Nltk,我有这样的密码 import codecs, nltk from nltk import * from threading import Thread #from textblob import TextBlob def write_tags(file_name, corpus, no): print "Writing to tokens" + no + ".tr ..." target = open(file_name, "w") lencorpus = len(c
import codecs, nltk
from nltk import *
from threading import Thread
#from textblob import TextBlob
def write_tags(file_name, corpus, no):
print "Writing to tokens" + no + ".tr ..."
target = open(file_name, "w")
lencorpus = len(corpus)
for d in range(lencorpus):
text = word_tokenize(corpus[d].replace("\n", ""))
line = ""
for e in range(len(text)):
line += text[e] + " "
line = line[:-1] + "\n"
target.write(line.encode("utf-8"))
target.close()
print "tokens" + no + ".tr is written ..."
def chunkIt(seq, num):
avg = len(seq) / float(num)
out = []
last = 0.0
while last < len(seq):
out.append(seq[int(last):int(last + avg)])
last += avg
return out
if __name__ == "__main__":
print "Importing corpus ..."
f = codecs.open("../corpus/corpus2.tr", encoding="utf-8").readlines()
print "Splitting corpus to 32 parts ..."
all_corpus = chunkIt(f, 32)
print "Writing tags to file ..."
thread_list = []
for a in range(32):
file_name = "../corpus/tokens" + str(a) + ".tr"
thread = Thread(target=write_tags, args=(file_name, all_corpus[a], str(a)))
thread_list.append(thread)
for b in range(32):
thread_list[b].start()
for c in range(32):
thread_list[c].join()
print "Merging files ..."
target = open("../corpus/tokens.tr", "w")
for d in range(32):
file_name = "../corpus/tokens" + str(d) + ".tr"
f = codecs.open(file_name, encoding="utf-8").read()
target.write(f.encode("utf-8"))
print "tokens" + str(d)
target.close()
导入编解码器,nltk
从nltk导入*
从线程导入线程
#从textblob导入textblob
def write_标记(文件名、语料库、编号):
打印“写入令牌”+否+”。tr
目标=打开(文件名,“w”)
lencorpus=len(语料库)
对于范围内的d(lencorps):
text=word\u标记化(语料库[d]。替换(“\n”,”)
line=“”
对于范围内的e(len(text)):
行+=文本[e]+“”
行=行[:-1]+“\n”
target.write(行编码(“utf-8”))
target.close()
打印“令牌”+否+”。tr已写入…”
def chunkIt(序号,数字):
平均值=长度(顺序)/浮动(数量)
out=[]
last=0.0
而最后一个
基本上,我想标记一个给定文本文件中的句子,这个文本文件包含370多万个句子。因为我使用nltk库进行标记化,所以完成这个过程需要一天以上的时间
出于这个原因,我决定做多线程处理,所以基本上我将给定的文本文件分成32个部分,并并行处理它们
但多线程似乎不会改变速度
我的进程慢是因为我在多线程中使用了很多内核吗?减少核心数量是否会带来更好的性能 线程化模块不会利用多个处理内核,它只会在同一个内核上的同一进程中的线程之间共享时间。如果您希望将处理分散到多个内核上(这很可能会减少程序执行所需的总时间),则您需要使用