Почему я могу передать метод экземпляра multiprocessing.Process, но не multiprocessing.Pool?
Я пытаюсь написать приложение, которое применяет функцию одновременно сmultiprocessing.Pool
, Я хотел бы, чтобы эта функция была методом экземпляра (чтобы я мог определять его по-разному в разных подклассах). Это не представляется возможным; как я узнал в другом месте, по-видимому,связанные методы не могут быть засолены, Так почему начинаетсяmultiprocessing.Process
со связанным методом в качестве целевой работы? Следующий код:
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()
Производит этот вывод:
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
Почему процессы могут обрабатывать связанные методы, но не пулы?