Я обнаружил ошибку травления при работе с многопроцессорностью:
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 ++
?
Спасибо!