Я написал функцию, которая возвращает кадр данных Pandas (образец в виде строки и дескриптора в виде столбцов) и принимает входные данные в виде списка пептидов (биологическая последовательность как данные строк). «my_function (pep_list)» принимает pep_list как параметр и возвращает фрейм данных. он перебирает eache пептидной последовательности из pep_list и вычисляет дескриптор и объединяет все данные в виде панда кадра данных и возвращает ДФ:Параллельный код Python
pep_list = [DAAAAEF,DAAAREF,DAAANEF,DAAADEF,DAAACEF,DAAAEEF,DAAAQEF,DAAAGEF,DAAAHEF,DAAAIEF,DAAALEF,DAAAKEF]
пример:
Я хочу parallelising этого кода с заданным алгоритмом сильфоном:
1. get the number of processor available as .
n = multiprocessing.cpu_count()
2. split the pep_list as
sub_list_of_pep_list = pep_list/n
sub_list_of_pep_list = [[DAAAAEF,DAAAREF,DAAANEF],[DAAADEF,DAAACEF,DAAAEEF],[DAAAQEF,DAAAGEF,DAAAHEF],[DAAAIEF,DAAALEF,DAAAKEF]]
4. run "my_function()" for each core as (example if 4 cores)
df0 = my_function(sub_list_of_pep_list[0])
df1 = my_function(sub_list_of_pep_list[1])
df2 = my_functonn(sub_list_of_pep_list[2])
df3 = my_functonn(sub_list_of_pep_list[4])
5. join all df = concat[df0,df1,df2,df3]
6. returns df with nX speed.
Пожалуйста, предложите мне лучшую подходящую библиотеку для реализации этого метода.
спасибо и приветствуем.
Updated
С некоторым чтением я могу записать код, который работает в соответствии с моими ожиданиями, как 1. без parallelising это занимает ~ 10 вторые для 10 пептидной последовательности 2. с двумя процессами она занимает ~ 6 секунд в течение 12 пептида 3. с четырьмя процессами она занимает ~ 4 секунды в течение 12 пептидов
from multiprocessing import Process
def func1():
structure_gen(pep_seq = ["DAAAAEF","DAAAREF","DAAANEF"])
def func2():
structure_gen(pep_seq = ["DAAAQEF","DAAAGEF","DAAAHEF"])
def func3():
structure_gen(pep_seq = ["DAAADEF","DAAALEF"])
def func4():
structure_gen(pep_seq = ["DAAAIEF","DAAALEF"])
if __name__ == '__main__':
p1 = Process(target=func1)
p1.start()
p2 = Process(target=func2)
p2.start()
p3 = Process(target=func1)
p3.start()
p4 = Process(target=func2)
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()
, но этот код легко работать с 10 пептида, но не в состоянии реализовать его для PEP_list содержит 1 миллион пептид
спасибо
процесса (цель = my_function, Args = (each_item_in_sub_list,)) начать() Вы можете икру больше процессов, чем количество процессоров – akalikin
Пожалуйста, объясните подробно, если возможно благодаря – jax