Nicht Gurke Funktion
So versuche ich, die Geschwindigkeit meiner Berechnung die Zeit, indem Sie ein wenig bit-multiprocessing
Ich versuche, den pool zu benutzen Arbeitnehmer.
Oben in meinem code habe ich
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
Dann, wenn die Zeit kommt, die ich verwenden
Both_Channels = [Chan1, Chan2]
results = mp.Pool(2).map(wrapper,Both_Channels)
filter1 = results[0]
filter2 = results[1]
Bekomme ich die folgende Fehlermeldung
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 und Chan2 arrays sind mein signal, und ich versuche, heraus zu filtern Rauschen heraus.
Ich bin neu zu Rendern, so dass ich entschuldige mich, wenn dies ist ein dummer Fehler
möglich, Duplikat der Can nicht Gurke <geben Sie 'instancemethod'> bei der Verwendung von python-multiprocessing-Pool.map()
Ich glaube nicht, verwenden Sie benutzerdefinierte Klassen, und das ist, wo sein Problem ist (zumindest soweit ich das sagen kann)
Das Problem ist, dass nicht alle Objekte sind picklable. Die Objekte sind nicht picklable? Lesen Sie einfach docs.
können Sie mehr darüber, wie Sie definiert sind Chan1/Chan2? was sind Sie?
Chan1 und Chan2 ist einfach ein array von zahlen. Sie kommen aus einer Reihe von binären Daten-Dateien, die dann getrimmt werden, die eine Potenz von 2 ist.
Ich glaube nicht, verwenden Sie benutzerdefinierte Klassen, und das ist, wo sein Problem ist (zumindest soweit ich das sagen kann)
Das Problem ist, dass nicht alle Objekte sind picklable. Die Objekte sind nicht picklable? Lesen Sie einfach docs.
können Sie mehr darüber, wie Sie definiert sind Chan1/Chan2? was sind Sie?
Chan1 und Chan2 ist einfach ein array von zahlen. Sie kommen aus einer Reihe von binären Daten-Dateien, die dann getrimmt werden, die eine Potenz von 2 ist.
InformationsquelleAutor Casey Daniel | 2014-03-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Markierte ich diese Frage als Duplikat von das Q/A, und, um es zusammenzufassen: man kann nicht Gurke Funktionen, und das ist, was Sie versuchen zu tun ist, wenn Sie übergeben
wrapper()
zuPool().map()
. Zu pickle den Funktionen, die Sie verwenden müssen copy_reg, wie gezeigt, durch diese Beispiel.Nein, sein problem, dass er versucht hatte, Sie zu pickle eine Instanz-Methode, die relativ nahe an eine Funktion, wie beide können nicht gebeizt werden. Und die Abhilfe für, Ein sollte auch für Sie arbeiten.
Aber ich habe nicht testen Sie es...
HTH
Both_Channels
, nichtwrapper
. Ein bisschen schwer zu sagen, da das traceback ist wenig hilfreich.oder tatsächlich die Beizen-Fehler kommt wahrscheinlich von dem Versuch Schiff
s.Noise_Reduction
Objekte zurück durch das Rohr. Wette, das ist es.mein Gefühl ist, dass es ja auch wrapper, die fehlschlägt (mit der Ausnahme aufgewachsen), auch wenn Sie möglicherweise Recht über
s.Noise_Reduction
wird die Sache innerhalb der Funktion, die macht es unpickable.Gibt es eine einfache Möglichkeit, Gurke mehrere Funktionen? Geräuschdämmung fordert auch mehrere andere Methoden, um den Lärm zu reduzieren in mein signal. Bin ich gerade einfach nur auf dem Holzweg, die Dinge effizienter?
Nun, ich denke, dass das, was der wirkliche Fehler ist, dein problem ist, dass du versuchst zu bewegen algorithmen zwischen Prozessen statt der Bewegung, um nur die Datensätze, die Sie möchten, dass die algorithmen arbeiten auf. Da der Algorithmus nicht ändern, für die Lebensdauer des Programms, können Sie instantiieren Sie leicht Ihre Prozesse mit Ihnen, und nur die Daten werden gebeizt zwischen Ihnen.
InformationsquelleAutor zmo