Python 运行多处理kmer计数脚本时出现问题

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

大家好,我想在基因组中查找单词/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 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()