У меня очень большие файлы. Каждый файл почти 2 ГБ. Поэтому я хотел бы запустить несколько файлов параллельно. И я могу сделать это, потому что все файлы имеют одинаковый формат, поэтому чтение файлов может выполняться параллельно. Я знаю, что должен использовать многопроцессорную библиотеку, но я действительно не понимаю, как использовать ее с моим кодом.
Мой код для чтения файлов:
def file_reading(file,num_of_sample,segsites,positions,snp_matrix):
with open(file,buffering=2000009999) as f:
###I read file here. I am not putting that code here.
try:
assert len(snp_matrix) == len(positions)
return positions,snp_matrix ## return statement
except:
print('length of snp matrix and length of position vector not the same.')
sys.exit(1)
Моя основная функция:
if __name__ == "__main__":
segsites = []
positions = []
snp_matrix = []
path_to_directory = '/dataset/example/'
extension = '*.msOut'
num_of_samples = 162
filename = glob.glob(path_to_directory+extension)
###How can I use multiprocessing with function file_reading
number_of_workers = 10
x,y,z = [],[],[]
array_of_number_tuple = [(filename[file], segsites,positions,snp_matrix) for file in range(len(filename))]
with multiprocessing.Pool(number_of_workers) as p:
pos,snp = p.map(file_reading,array_of_number_tuple)
x.extend(pos)
y.extend(snp)
Итак, мой ввод в функцию выглядит следующим образом:
- file - список, содержащий имена файлов
- num_of_samples - значение int
- segsites - изначально пустой список, к которому я хочу добавить, когда читаю файл.
- позиции - изначально пустой список, к которому я хочу добавить, когда я читаю файл.
- snp_matrix - изначально пустой список, к которому я хочу добавить, когда я читаю файл.
Функция возвращает список позиций и список snp_matrix в конце. Как я могу использовать многопроцессорность для этого, где мои аргументы являются списками и целыми числами? То, как я использовал многопроцессорность, дает мне следующую ошибку:
TypeError: file_reading () отсутствует 3 обязательных позиционных аргумента: 'segsites', 'позиции' и 'snp_matrix'