Я пытаюсь изменить ровно 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