Не могу засолить функцию
Поэтому я пытаюсь ускорить время вычислений, выполнив несколько многопроцессорных
Я пытаюсь использовать работников бассейна.
В верхней части моего кода у меня есть
import Singal as s
import multiprocessing as mp
def wrapper(Channel):
Noise_Frequincies = []
for i in range(1,125):
Noise_Frequincies.append(60.0*float(i))
Noise_Frequincies.append(180.0)
filter1 = s.Noise_Reduction(Sample_Rate,Noise_Frequincies,Channel)
return filter1
Затем, когда придет время, я использую
Both_Channels = [Chan1, Chan2]
results = mp.Pool(2).map(wrapper,Both_Channels)
filter1 = results[0]
filter2 = results[1]
Я получаю следующую ошибку
Exception in thread Thread-2:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 808, in __bootstrap_inner
self.run()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 761, in run
self.__target(*self.__args, **self.__kwargs)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 342, in _handle_tasks
put(task)
PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
Chan1 and Chan2 are arrays of my signal, and I'm trying to filter out some noise out of each. I'm new to multiprocessing so I apologize if this is a dumb error
2 ответа
Я пометил этот вопрос как дубликат этого Q / A, и подведу итог: вы не можете выбирать функции, и это то, что вы пытаетесь сделать, когда проходите wrapper()
в Pool().map()
, Чтобы выбрать функции, вам нужно использовать copy_reg, как показано в этом примере.
"Классы, функции и методы не могут быть засечены - если вы протравливаете объект, класс объекта не подвергается засечке, это просто строка, идентифицирующая, к какому классу он принадлежит. " (См. Документ)
- http://docs.python.org/2/library/copy_reg.html?highlight=copyreg
- http://bytes.com/topic/python/answers/552476-why-cant-you-pickle-instancemethods
Я не использую пользовательские классы, и в этом его проблема (по крайней мере, насколько я могу судить)
нет, его проблема в том, что он пытался выбрать метод экземпляра, который относительно близок к функции, так как оба не могут быть обработаны. И обходной путь для этого А должен работать и для вас.
Хотя я не проверял это…
НТН
Я столкнулся с похожей ошибкой - И она была решена путем изменения параметров работы скрипта
Когда я использовал запуск pycharm в опции консоли, он потерпел неудачу, как в примере с проблемой поиска ошибки травления, не может найти атрибут функции.
Пока я использовал режим запуска или отладки, он работал, просто находя - я предполагаю, что он загружает функцию по-разному в обоих направлениях.