如果我终止了我从中调用 serve_forever 的进程并重新启动它,则客户端不会重新连接。它们不会自动重新连接。当我尝试删除管理器客户端对象“del obj”并创建一个新对象时,每次尝试使用代理或新创建的代理调用管理器时,我仍然会收到 BrokenPipeError。
经理:
import multiprocessing.managers, os, sys, time
class TestClass(object):
def test_method(self):
print("In test_method")
return "TEST"
class TestManager(multiprocessing.managers.BaseManager):
pass
address = ("127.0.0.1", 54321)
TestManager.register("Test", TestClass)
manager = TestManager(address = address, authkey = "1234".encode("utf-8"))
manager.get_server().serve_forever()
客户:
import multiprocessing.managers, os, sys, time
class TestManager(multiprocessing.managers.BaseManager):
pass
address = ("127.0.0.1", 54321)
TestManager.register("Test")
manager = TestManager(address = address, authkey = "1234".encode("utf-8"))
manager.connect()
test_class = manager.Test()
def call_it():
time.sleep(1)
result = test_class.test_method()
print("result: '" + str(type(result)) + ", " + str(result) + "'")
call_it()
print("Kill and restart the server and press return")
sys.stdin.readline()
error = False
while (True):
try:
if (error):
print("Reconnecting")
manager.connect()
test_class = manager.Test()
call_it()
error = False
except Exception as e:
print("Got exception " + str(type(e)) + ", " + repr(e))
error = True
time.sleep(1)
请注意,在再次调用 connect() 之前,我还尝试添加以下内容。
del manager
manager = TestManager(address = address, authkey = "1234".encode("utf-8"))