Warum kann ich eine Instanzmethode an multiprocessing.Process übergeben, aber nicht an multiprocessing.Pool?

Ich versuche, eine Anwendung zu schreiben, die eine Funktion gleichzeitig mit einem @ anwendemultiprocessing.Pool. Ich möchte, dass diese Funktion eine Instanzmethode ist (damit ich sie in verschiedenen Unterklassen unterschiedlich definieren kann). Dies scheint nicht möglich zu sein; wie ich woanders gelernt habe, anscheinendgebundene Methoden können nicht gebeizt werden. Warum beginnt einmultiprocessing.Process mit einer gebundenen Methode als Zielarbeit? Der folgende Code:

import multiprocessing

def test1():
    print "Hello, world 1"

def increment(x):
    return x + 1

class testClass():
    def process(self):
        process1 = multiprocessing.Process(target=test1)
        process1.start()
        process1.join()
        process2 = multiprocessing.Process(target=self.test2)
        process2.start()
        process2.join()

    def pool(self):
        pool = multiprocessing.Pool(1)
        for answer in pool.imap(increment, range(10)):
            print answer
        print
        for answer in pool.imap(self.square, range(10)):
            print answer

    def test2(self):
        print "Hello, world 2"

    def square(self, x):
        return x * x

def main():
    c = testClass()
    c.process()
    c.pool()

if __name__ == "__main__":
    main()

Erzeugt diese Ausgabe:

Hello, world 1
Hello, world 2
1
2
3
4
5
6
7
8
9
10

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Python27\Lib\threading.py", line 551, in __bootstrap_inner
    self.run()
  File "C:\Python27\Lib\threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "C:\Python27\Lib\multiprocessing\pool.py", line 319, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed

Warum können Prozesse gebundene Methoden verarbeiten, aber keine Pools?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage