Использование многопроцессорного пула с функцией, которая принимает список массивовPython

Программы на Python
Anonymous
Использование многопроцессорного пула с функцией, которая принимает список массивов

Сообщение Anonymous »

Я пытаюсь написать функцию для параллельного чтения большого количества файлов. У меня есть такой код:

Код: Выделить всё

import numpy as np
from multiprocessing import Pool
from functools import partial

def read_profiles(stamp,name,cols,*args):
#This function reads each file.
filename=name + '-' + str(int(timestep[stamp])) + '.dat'
with open(filename) as f:
xloc = 0
for line in f:
ele = line.rstrip("\n").split()
for g in len(args):
args[g][stamp,xloc] = float(ele[cols[g]])
xloc = xloc + 1

timestep = np.arange(1,51)
x = np.ndarray(shape=(len(timestep),1001))
Ex = np.ndarray(shape=(len(timestep),1001))
j1 = np.ndarray(shape=(len(timestep),1001))
j2 = np.ndarray(shape=(len(timestep),1001))
j3 = np.ndarray(shape=(len(timestep),1001))
j4 = np.ndarray(shape=(len(timestep),1001))

terse_args = [x,Ex]
curr_args = [j1,j2,j3,j4]

with Pool(4) as pool:
pool.map(partial(read_profiles,name='terse',cols=[0,2],*args=*terse_args),range(len(timestep)))
pool.map(partial(read_profiles,name='current',cols=[1,2,3,4],*args=*curr_args),range(len(timestep)))
Обратите внимание, что последний аргумент (*args) принимает неизвестное количество двумерных массивов.
Приведенный выше код выдает ошибку с сообщением «неверный синтаксис» в *args. Я пробовал передать их как позиционные аргументы без ключевых слов, но затем получаю сообщение об ошибке с указанием нескольких значений для «имени».
Кто-нибудь знает, как я могу включить произвольное количество двумерных массивов в качестве аргумент функции при использовании пула.map и частичного?
Сообщите мне, если потребуется какая-либо другая информация.
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -of-arrays

Вернуться в «Python»