Python编程:多处理

2024-04-28 15:45:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有剧本。它是CPU密集型的,我可以访问多核机器,但它没有显示它的利用率。如何使用Python3中的多处理库?或者别的什么?欢迎任何修改脚本的建议。谢谢您!你知道吗

from nltk.corpus import wordnet as wn

from itertools import chain 

for line in infile:

  word = line.strip()

  if (word not in Dict):

      Dict[word]=(set(["-","-","-"]),0)

  lemma = lmtzr.lemmatize(word)

  for w, net1, net2, lch in syn(lemma):



      if (word not in Dict):

          Dict[word]={}

      for l in net2.lemmas():

          synonyms.append(l.name())


  Dict[word] = (set(synonyms),round(lch,2))


  synonyms =[]



infile.close()


csv_writer(Dict, "Text8_types_similar_lch.csv")

Tags: infromimportforiflinenotdict
1条回答
网友
1楼 · 发布于 2024-04-28 15:45:28

您可以使用joblib。首先,将代码放入一个可以在任意行数上工作的函数中。您可以将函数的结果写入csv文件,从而为每个进程生成一个不同的文件,您必须合并该文件,或者只返回一些内容:

def my_func(lines):
    return_dict = {}
    for line in lines:
        # put your code here
    return return_dict

然后,编写一个函数将lines分割成更小的块:

from itertools import islice

def grouper(n, iterable):
    it = iter(iterable)
    while True:
        chunk = tuple(islice(it, n))
       if not chunk:
           return
       yield chunk

最后,调用joblib的Parallel将每个数据块传递给函数:

from joblib import Parallel, delayed

results = Parallel(n_jobs=num_cores)(
    delayed(my_func)(line_chunk) for line_chunk in grouper(lines, 500))

results将是从my_func返回的项目的列表,您可以按自己的喜好合并它们。你知道吗

相关问题 更多 >