¿Por qué puedo pasar un método de instancia a multiprocessing.Process, pero no a multiprocessing.Pool?

Estoy tratando de escribir una aplicación que aplique una función simultáneamente con unmultiprocessing.Pool. Me gustaría que esta función sea un método de instancia (para poder definirla de manera diferente en diferentes subclases). Esto no parece ser posible; como he aprendido en otra parte, aparentementelos métodos enlazados no se pueden encurtir. Entonces, ¿por qué comenzar unmultiprocessing.Process con un método enlazado como un trabajo objetivo? El siguiente código:

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

Produce esta salida:

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 qué los procesos pueden manejar métodos enlazados, pero no agrupaciones?

Respuestas a la pregunta(3)

Su respuesta a la pregunta