所以我试图通过做一点多处理来加快我的计算时间
我正在尝试使用池工作者。
我的代码顶部有
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和Chan2是我信号的数组,我试图从每个信号中滤除一些噪音。 我是多处理的新手,所以如果这是一个愚蠢的错误,我道歉
答案 0 :(得分:2)
我将此问题标记为that Q/A的副本,并总结一下:您无法挑选功能,这就是您将wrapper()
传递给{{1}时要尝试做的事情}。要使用pickle函数,您需要使用copy_reg,如example所示。
“不能腌制类,函数和方法 - 如果你挑选一个对象,那么对象的类就不会被pickle,只是一个标识它所属的类的字符串。”(cf doc)
不,他的问题是他试图挑选一个实例方法,它相对接近一个函数,因为它们都不能被腌制。 A的解决方法也应该对你有用。我不使用自定义类,这就是他的问题所在(至少据我所知)
虽然我没有测试它......
HTH