在许多内核上运行进程会导致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个部分,并并行处理它们

但多线程似乎不会改变速度


我的进程慢是因为我在多线程中使用了很多内核吗?减少核心数量是否会带来更好的性能

线程化
模块不会利用多个处理内核,它只会在同一个内核上的同一进程中的线程之间共享时间。如果您希望将处理分散到多个内核上(这很可能会减少程序执行所需的总时间),则您需要使用