многопроцессорная обработка Python BaseManager зарегистрировал потерянное соединение сразу после нажатия Ctrl-C
У меня возникают некоторые проблемы, которые, как я подозреваю, ограничивают мою программу на Python для правильной обработки, моя программа не может вызывать методы зарегистрированного класса BaseManager сразу после нажатия Ctrl-C, даже другой процесс реализован как классы, которые наследуют от многопроцессорной обработки. Процесс затрагивается. У меня есть некоторые методы, которые я хотел бы вызвать из процесса, которые не выполняются правильно после Ctrl-C.
Например, следующий код не может вызвать экземпляр mt TestClass после Ctrl-C.
from multiprocessing.managers import BaseManager, NamespaceProxy
import time
class TestClass(object):
def __init__(self, a):
self.a = a
def b(self):
print self.a
class MyManager(BaseManager): pass
class TestProxy(NamespaceProxy):
# We need to expose the same __dunder__ methods as NamespaceProxy,
# in addition to the b method.
_exposed_ = ('__getattribute__', '__setattr__', '__delattr__', 'b')
def b(self):
callmethod = object.__getattribute__(self, '_callmethod')
return callmethod('b')
MyManager.register('TestClass', TestClass, TestProxy)
if __name__ == '__main__':
manager = MyManager()
manager.start()
t = TestClass(1)
print t.a
mt = manager.TestClass(2)
print mt.a
mt.a = 5
mt.b()
try:
while 1:
pass
except (KeyboardInterrupt, SystemExit):
time.sleep(0.1)
mt.a = 7
mt.b()
print "bye"
pass
Here is the console output
1
2
5
^CTraceback (most recent call last):
File "testManager.py", line 38, in <module>
mt.a = 7
File "/usr/lib/python2.7/multiprocessing/managers.py", line 1028, in __setattr__
return callmethod('__setattr__', (key, value))
File "/usr/lib/python2.7/multiprocessing/managers.py", line 758, in _callmethod
conn.send((self._id, methodname, args, kwds))
IOError: [Errno 32] Broken pipe
Есть ли у вас предложения? Есть ли обходной путь или что-то не так в моем коде?
Заранее спасибо.