将计数函数传递给 Parallel 并延迟

时间:2021-02-26 16:03:56

标签: python parallel-processing

嗨,我正在尝试传递 count_kmers 函数:

def get_kmers_from_sequence(sequence, min_k, max_k):
    """
    Generate all DNA k-mers over the entirety of a sequence.
    Inputs:
    sequence - string where all kmers will be checked
    min_k: minimum DNA kmer length (int)
    max_k: maximum DNA kmer length (int)
    Output:
    yields all DNA kmers (str) of length min_k to max_k
    """
    limits = range(min_k, max_k + 1)
    for i in range(0, len(sequence) - max_k + 1):
        for j in limits:
            yield sequence[i:i+j]

def count_kmers(sequence, alphabet, min_k, max_k):
counts = defaultdict(int)
for kmer in get_kmers_from_sequence(sequence, min_k, max_k):
    if set(kmer).issubset(alphabet):
        counts[kmer] = counts.get(kmer, 0) + 1
return counts

并行和延迟,但我做得不好。这个函数需要一个fasta文件列表(例如波纹管):

>seq
'ACGTACGGGAATACCACAC'

并计算 k-mers/n-grams/k-tuples,其中 k 是序列的长度。

count_kmers(s, 'ACGT', 2, 2)
defaultdict(int,
        {'AC': 5,
         'CG': 2,
         'GT': 1,
         'TA': 2,
         'GG': 2,
         'GA': 1,
         'AA': 1,
         'AT': 1,
         'CC': 1,
         'CA': 2})

我想加快计数和工作速度,因为我有很多文件,而且有些文件可能很大。

任何可以帮助我的提示,我真的很感激。 感谢您抽出宝贵时间。

保罗

0 个答案:

没有答案
相关问题