Python 运行多处理kmer计数脚本时出现问题
大家好,我想在基因组中查找单词/kmers/ngrams。我有198000个文件,每个文件包含一个长度为N的基因组。 我有一些代码,比如:Python 运行多处理kmer计数脚本时出现问题,python,python-multiprocessing,Python,Python Multiprocessing,大家好,我想在基因组中查找单词/kmers/ngrams。我有198000个文件,每个文件包含一个长度为N的基因组。 我有一些代码,比如: def count_kmers(sequence, alphabet, k, base_filter=False): seq, alphabet = sequence.upper(), set(alphabet.upper()) seq_len = len(seq) count = Counter(seq[i:i+k] for i i
def count_kmers(sequence, alphabet, k, base_filter=False):
seq, alphabet = sequence.upper(), set(alphabet.upper())
seq_len = len(seq)
count = Counter(seq[i:i+k] for i in range(0, seq_len - k +1))
if base_filter:
return dict((key,value) for key, value in
count.items() if set(key).issubset(alphabet))
return count
def kmer_positions(sequence, alphabet, k):
""" returns the position of all k-mers in sequence as a dictionary"""
mer_position = defaultdict(list)
for i in range(1,len(sequence) - k + 1):
kmer = sequence[i:i+k]
if all(base in set(alphabet) for base in kmer):
mer_position[kmer] = mer_position.get(kmer,[]) + [i]
# combine kmers with their reverse complements
pair_position = defaultdict(list)
for kmer, pos in mer_position.items():
krev = get_reverse_complement(kmer)
if kmer < krev:
pair_position[kmer] = sorted(pos + mer_position.get(krev, []))
elif krev < kmer:
pair_position[krev] = sorted(mer_position.get(krev, []) + pos)
else:
pair_position[kmer] = pos
return pair_position
我试着找一份好材料学习,但还是不满意。
对更好地使用这个工具有什么帮助吗
谢谢
PS-我知道有很多工具专门用于此任务,如高棉语、kat等。。。
但是我正在学习python,我想尽我所能学习最好的语言,因为您直接在
r=pool之后使用r.get()
。应用异步(…)
,您也可以使用pool.map(…)
。我试过了,但是我得到了一个arror…请求一个迭代器,因为我的args中有'ACGT'和一个整数。然后我使用apply_async完成了它。将参数包装在一个元组中,并将其解压缩到辅助函数中。:-)由于您直接在r=pool.apply_async(…)
之后使用r.get()
,因此您也可以使用pool.map(…)
。我尝试了,但我收到了一个请求迭代器的请求,因为我的参数中包含“ACGT”和整数。然后我使用apply_async完成了它。将参数包装在一个元组中,并将其解压缩到辅助函数中。:-)
args = [alphabet='ACGT', k=6]
f = partial(kmer_positions, genome)
pool = multiprocessing.Pool(4)
r = pool.apply_async(f, args) # use apply_async that was the one who works to my arguments
r.get().keys()