Por que posso passar um método de instância para multiprocessing.Process, mas não para multiprocessing.Pool?

Estou tentando escrever um aplicativo que aplique uma função simultaneamente a ummultiprocessing.Pool. Gostaria que essa função fosse um método de instância (para que eu possa defini-la de maneira diferente em diferentes subclasses). Isso não parece ser possível; como aprendi em outro lugar, aparentementemétodos vinculados não podem ser mantidos em conserva. Então, por que iniciar ummultiprocessing.Process com um método vinculado como um trabalho de destino? O código a seguir:

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()

Produz esta saída:

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

Por que os Processos podem lidar com métodos vinculados, mas não Pools?

questionAnswers(3)

yourAnswerToTheQuestion