библиотека joblib дает неожиданные результаты - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь изменить ровно N букв в строке длиной L со всеми возможными комбинациями из {A, C, G, U} (последовательность РНК) в этом примере N = 2 L = 3 при последовательном запуске функции «create_seqs» она работает нормально, но при попытке ее параллельного выполнения не работает

Я попытался заменить порядок циклов и даже использовать только один цикл за раз в параллельной линии, как вы можете видеть в комментарии в цикле

import pandas as pd
import itertools
from joblib import Parallel, delayed

def create_seqs(idx,nucs,wt):

    tmp1 = list(wt)
    flag=0
    for loc in range(len(nucs)):
        if tmp1[j[loc]] == nucs[loc]:
            flag = 1
        if flag:
            break
    if not flag:
        print(idx)
        print(nucs)
        for loc in range(len(nucs)):
            tmp1[j[loc]] = nucs[loc]    
    return ''.join(tmp1)

wt = 'AGC'

i=2 #number of nucs to change

#all posible nucleutide combination
Alli = list(itertools.permutations(['A','C','G','U']*i,i))
#all posible indexs combination
IDXperms19 = list(itertools.permutations(list(range(0,len(wt))),i))

tmp1=[]
tmp=[]
tmp1 = Parallel(n_jobs=1)(delayed(create_seqs)(j,nucs,wt)  for j in IDXperms19 for nucs in Alli)

for j in IDXperms19:
    for nucs in Alli:
        tmp.append(create_seqs(j,nucs,wt))
#    tmp1 = Parallel(n_jobs=2)(delayed(create_seqs)(j,nucs,wt) for nucs in Alli)  +tmp1
tmp = list(set(tmp)) 
tmp1 =list(set(tmp1))

как ожидается, длина tmp составляет 28 (все возможные замены плюс исходная), но len (tmp1) = 10

...