Я пытаюсь распараллелить функцию в Python 2.7 с помощью модуля многопроцессорности. К сожалению, в моей функции пула я, кажется, получаю ошибку при передаче нескольких аргументов. Я попытался упаковать их в виде списка кортежей, как класс, и как список списков, и все, кажется, дает мне следующую ошибку:Ошибка имени пула с несколькими аргументами
File "plot_gfs.py", line 132, in plot_data
results = pool.map(plot_var,args)
File "/opt/Python2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
File "/opt/Python2.7/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
AttributeError: 'str' object has no attribute 'name'
Это мой параллельный код функции:
def plot_data(lats, lons, bounds):
lons2, lats2 = np.meshgrid(lons, lats)
x, y = basem(lons2, lats2)
pool = mp.Pool(4)
args = [('prmslmsl', 0, 'jet', 950, 1050, i, x, y, bounds)
for i in range(80)]
results = pool.map(plot_var, args)
pool.close()
pool.join()
как примечание: функция plot_var тег:
def plot_var(var_in):
Passing аргументы в виде кортежа производит ту же ошибку. Я работаю над тем, чтобы ваше второе решение работало, но оно, по-видимому, передает каждое значение моего кортежа индивидуально (поэтому он передает элемент 1 кортежа 1, элемент 2 кортежа 1 и т. Д.) – Laxsnor
Я понял, почему ваш второе решение не работает - оно не соответствует моему использованию. У меня есть список кортежей, и я пытаюсь сопоставить plot_var с каждым кортежем. – Laxsnor
args - список кортежей, правильно? Если это так, вы должны иметь возможность перебирать его для получения кортежей, например. args = [(1,2,3), (4,5,6)], >>> [a для a in args] Выход [4]: [(1, 2, 3), (4, 5, 6)] – Alexander