服务器重启时代理不会自动重新连接到我的 SyncManager 子类

时间:2021-02-14 01:30:00

标签: python-3.x multiprocessing

如果我终止了我从中调用 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"))

0 个答案:

没有答案