Cas*_*iel 8 python pool multiprocessing
所以我试图通过做一点多处理来加快我的计算时间
我正在尝试使用池工人.
在我的代码的顶部,我有
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
Run Code Online (Sandbox Code Playgroud)
然后到时候我用
Both_Channels = [Chan1, Chan2]
results = mp.Pool(2).map(wrapper,Both_Channels)
filter1 = results[0]
filter2 = results[1]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
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
Run Code Online (Sandbox Code Playgroud)
Chan1和Chan2是我信号的数组,我试图从每个信号中滤除一些噪声.我是多处理的新手,所以如果这是一个愚蠢的错误,我道歉
我将这个问题标记为Q/A的重复,总结一下:你不能 pickle 函数,而这就是你传递到 时想要做的wrapper()
事情Pool().map()
。要 pickle 函数,您需要使用 copy_reg,如本示例所示。
“类、函数和方法不能被pickle——如果你pickle一个对象,该对象的类不会被pickle,只是一个标识它所属类的字符串。”(cf doc)
我不使用自定义类,这就是他的问题所在(至少据我所知)
不,他的问题是他试图腌制一个实例方法,该方法相对接近于函数,因为两者都不能腌制。A 的解决方法也应该适合您。
虽然我没有测试过..
归档时间: |
|
查看次数: |
15016 次 |
最近记录: |