Mit multiprocessing
auf Methoden erhalten wir Fehler unter Angabe self.methods cannot be pickled
.MultiProcessing mit self.methods
dieses Ich zu überwinden verwendet:
def _pickle_method(m):
if m.im_self is None:
return getattr, (m.im_class, m.im_func.func_name)
else:
return getattr, (m.im_self, m.im_func.func_name)
copy_reg.pickle(types.MethodType, _pickle_method)
Nun suchte ich darüber, aber einige Fragen sind noch unklar:
- Warum werden nicht
self.methods
gebeizt? - Wie funktioniert
copy_reg.pickle()
? Wie ermöglicht es das Beizen vonself.methods
? - Gibt es irgendwelche Nachteile bei der Verwendung dieses Ansatzes oder gibt es andere, bessere Methoden?
Mehr Info:
hatte ich eine Funktion in einer Klasse, die ein request.get
und request.post
zu tun verwendet. Um die Zeiten zu verbessern, habe ich Multiprocessing verwendet. Dies ist das genaue Problem, dem ich gegenüberstand.
Ohne weitere Informationen, ist es schwer zu verstehen, _why_ ' pickle' würde versuchen, eine tatsächliche Klassenmethode zu serialisieren (das ist nicht wie 'pickl e' macht Dinge) - so ist es möglich, Antwort ist "Wenn du das tun musst, machst du etwas anderes falsch." Bitte [bearbeiten] Sie Ihre Frage und fügen Sie mehr Kontext hinzu. – martineau
Was genau ist 'self.methods'? Wenn möglich, zeigen Sie die Klasse mit der Methode an, die 'request.get' und' request.post' (und die zugehörige Multiprocessing) ausführt. – martineau
@martineau Ich habe gerade den Namen self.mathods verwendet .... sie sind nur irgendwelche Methoden der Klasse, die sich selbst nehmen ...... der Code kann in der verbundenen SO-Post gefunden werden ... ist gleich oder ähnlich – vks