Обработка проблемы травления classmethod с помощью copy_reg

Я обнаружил ошибку травления при работе с многопроцессорностью:

 from multiprocessing import Pool

 def test_func(x):
     return x**2

 class Test:
     @classmethod
     def func(cls, x):
         return x**2

 def mp_run(n, func, args):
     return Pool(n).map(func, args)

 if __name__ == '__main__':
     args = range(1,6)

     print mp_run(5, test_func, args)
     # [1, 4, 9, 16, 25]

     print mp_run(5, Test.func, args)
     """
     Exception in thread Thread-3:
     Traceback (most recent call last):
       File "/usr/lib64/python2.6/threading.py", line 532, in __bootstrap_inner
         self.run()
       File "/usr/lib64/python2.6/threading.py", line 484, in run
         self.__target(*self.__args, **self.__kwargs)
       File "/usr/lib64/python2.6/multiprocessing/pool.py", line 225, in _handle_tasks
         put(task)
     PicklingError: Can't pickle : attribute lookup __builtin__.instancemethod failed
     """

И я нашел здесь полезную ветку , решение идеально подходит для этого метода экземпляра в самодостаточном стиле, но у меня возникла проблема с применением рецепта к @classmethod: А как насчет C ++? Спасибо!

синхронизированный в Java может гарантировать безопасность потока. А как насчет C ++ ?

Спасибо!

43
задан Tamir Vered 12 February 2016 в 11:02
поделиться