Идея заключается в следующем: у меня есть более 1000 файлов (профилей генной экспрессии), которые мне нужно прочитать и вставить соответствующую матрицу данных в общий словарь.Делать это просто с циклом for, но также очень медленно (конечный словарь может быть что-то вроде 10 Гб).Поэтому я посмотрел на модуль многопроцессорной обработки, но получаю список None
, а глобальный словарь пуст.В следующем коде, который я сейчас использую.
import os
import GEOparse
import mygene as mg
import pandas as pd
import numpy as np
from multiprocessing import Pool
PATH = '../../data/GEO/'
directory = os.fsencode(PATH)
def get_exprs(filename):
global dic_df
global j
# Import dataset
gse = GEOparse.get_GEO(filepath=f'{PATH}{filename}', silent=True)
# Create PD dataframe for each GEO entry (for each use object)
i = 0
for name, gsm in gse.gsms.items():
if (i==0): #We are reading a new file
dic_df[str(j)] = pd.DataFrame(data=gsm.table.iloc[0:, 0])
temp = pd.Series(gsm.table.iloc[0:, 1])
dic_df[str(j)].insert(i+1, str(gsm), temp)
i += 1 #Update column of matrix to be added to the dataframe
j += 1 #Update entry dictionary
if __name__ == '__main__':
pool = Pool(2)
dic_df = {} #Global dictionary containing matrices
j = 0 #Initial value for the dictionary
list_files = [os.fsdecode(file) for file in os.listdir(directory) if file!=b'.DS_Store'] #List of all the files to analyze
print(pool.map(get_exprs, list_files, chunksize=2))
pool.close()
pool.join()
Прежде чем что-то сказать, я знаю, что нет входных данных для его проверки, но я не знаю, как я могу поделиться этими файлами с вами.Мне нужно понять, почему этот код не работает должным образом (на самом деле, вообще).