Параллельная версия Pyswarm (0.7) «Объекты ctypes, содержащие указатели, нельзя обрабатывать - PullRequest
0 голосов
/ 11 февраля 2020

Я использую версию Pyswarm, реализованную для поддержки многопроцессорной обработки ( ссылка ). Я уже использовал его в Python 2.7, и он работает. Я использую сейчас Python 3.7 и получаю эту ошибку:

  File "experiment.py", line 152, in <module>
    processes = 4
  File "/home/fabio.rangel/projects/insight_studies/binary_classifier_exploration/.direnv/python-3.6.10/lib/python3.6/site-packages/pyswarm/pso.py", line 141, in pso
    fx = np.array(mp_pool.map(obj, x))
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 266, in map
    return self._map_async(func, iterable, mapstar, chunksize).get()
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 644, in get
    raise self._value
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 424, in _handle_tasks
    put(task)
  File "/usr/lib/python3.6/multiprocessing/connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/usr/lib/python3.6/multiprocessing/reduction.py", line 51, in dumps
    cls(buf, protocol).dump(obj)
ValueError: ctypes objects containing pointers cannot be pickled

Мой код прост:

from pyswarm import pso
optimizer = pso(
                        fitness, 
                        lb = [1, 0, 0.0, 0.0, 0.0, 0.1, 0.0], 
                        ub = [6, 1, 1, 1, 1, 1, 10],  
                        swarmsize = 100,
                        omega=0.1, 
                        phip=0.1, 
                        phig=0.1,
                        processes = 4
                    )

Не могли бы вы помочь мне решить эту проблему?

...