Глубокая копия вызывает "Класс" не имеет атрибута "размер" - PullRequest
0 голосов
/ 02 июня 2018

В настоящее время я пытаюсь реализовать параллельное выполнение процесса.Для каждого из этих процессов каждый процесс должен создать копию объекта «А», а затем продолжить работу с этим объектом.

У меня есть следующее:

from copy import deepcopy

def some_A():
    def wrapper_singlerun(_):
        return single_run(self, t_kernel, X, Y)

    pool = pathos.multiprocessing.Pool(4)
    all_responses = pool.map(wrapper_singlerun, 100)

def single_run(self, t_kernel, X, Y):
    t_kernel = deepcopy(t_kernel) # <<< This line fails
    ...

Обратите внимание, чтодве функции НЕ находятся в одном классе!(self должен быть словарём объектов, чтобы иметь возможность доступа к полям из этого объекта. Хотя эти поля никогда не изменяются).

Однако, когда я применяю вышеуказанные функции, я получаю следующую ошибку:

self = <bacode.tripathy.src.bilionis_refactor.t_kernel.TripathyMaternKernel object at 0x1a0e6f5ba8>

@property
def param_array(self):
    """
        Array representing the parameters of this class.
        There is only one copy of all parameters in memory, two during optimization.

        !WARNING!: setting the parameter array MUST always be done in memory:
        m.param_array[:] = m_copy.param_array
        """
    if (self.__dict__.get('_param_array_', None) is None) or (self._param_array_.size != self.size):
      self._param_array_ = np.empty(self.size, dtype=np.float64)

E AttributeError: у объекта 'TripathyMaternKernel' нет атрибута 'size'

 /Users/davidal/miniconda3/lib/python3.6/site-packages/paramz/core/parameter_core.py:349: AttributeError

Я использовал для получения аналогичной ошибки, выбравобъект при использовании многопроцессорности.Однако я не совсем понимаю, почему это происходит на этот раз.Нужно ли копировать объект t_kernel по-другому?Любые идеи, почему вышеприведенная функция не работает?

...