因此,在我的项目中,我必须得到一个基因列表,并从同义词中清除它ex. gene A might also be known as AA, so if in my original list there is AA and A I have to delete one of the two.
基因列表由用户提供,我从文本文件中读取同义词
两者都存储在dictionaries
列表是huuuuuge
(特朗普笑话),我将不得不在管道中多次调用此函数。所以我的问题是:我能用这个让它更快吗
我最初的做法如下:
for g in genes:
process = multiprocessing.Process(target = fixReoccurences, args = (g, genes, synonyms, replaced, ))
my_processes.append(process)
process.start()
# Wait for *ALL* the processes to finish.
for p in my_processes:
p.join()
但是这种方法很快就失败了,因为我的脚本需要400个进程,所有进程都在运行一个循环,循环次数约为40000次。它真的冻结了我的笔记本电脑
那么,如何有效地利用CPU的多核来处理进程,从而解决这个问题呢
我生成了一些随机数据,然后做了一个直线替换:
我的输出如下所示:
构建输入数据需要18秒,替换同义词只需要3秒。那是400*40000件。我不确定你的输入项目是单个基因还是某种SAM序列什么的。在这个问题上提供更多的信息可能会更好
我不认为你需要多处理这个。只要在读取文件时处理好数据就行了
更新
抱歉昨晚退学了。但是,啤酒
无论如何,这里有一些代码可以读入同义词文件,每一行都有一对单词,比如
"old new",
,并构建一个字典来映射每一个旧的->;新单词。然后,它“展平”字典,这样就不需要重复查找-每个键都存储了它的最终值。我想你可以用这个来读同义词文件等等使用^{}
你可以有一个函数,它接受一个基因并返回它,或者
None
如果它应该被过滤:可以使用
partial
绑定函数的参数:那么这个函数就可以用一个基因来调用了
可以使用进程池将函数映射到数据序列:
map函数还可以将数据块传递给适当的函数:
以及:
相关问题 更多 >
编程相关推荐