不能泡菜功能

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是我信号的数组,我试图从每个信号中滤除一些噪声.我是多处理的新手,所以如果这是一个愚蠢的错误,我道歉

zmo*_*zmo 5

我将这个问题标记为Q/A的重复,总结一下:你不能 pickle 函数,而这就是你传递到 时想要做的wrapper()事情Pool().map()要 pickle 函数,您需要使用 copy_reg,如本示例所示。

“类、函数和方法不能被pickle——如果你pickle一个对象,该对象的类不会被pickle,只是一个标识它所属类的字符串。”(cf doc

我不使用自定义类,这就是他的问题所在(至少据我所知)

不,他的问题是他试图腌制一个实例方法,该方法相对接近于函数,因为两者都不能腌制。A 的解决方法也应该适合您。

虽然我没有测试过..