Ethan Furman <et...@stoneleaf.us> added the comment:
Here is the test, reduced and in a single script: --- 8< -------------------------------------------------------------------- import multiprocessing.managers, os, sys, time if __name__ == '__main__': address = ("127.0.0.1", 54321) class TestManager(multiprocessing.managers.BaseManager): pass if sys.argv[1] == 'server': class TestClass(object): def test_method(self): print("In test_method") return "TEST" TestManager.register("Test", TestClass) manager = TestManager(address = address, authkey = "1234".encode("utf-8")) print('waiting...') manager.get_server().serve_forever() else: TestManager.register("Test") manager = TestManager(address = address, authkey = "1234".encode("utf-8")) manager.connect() test_class = manager.Test() print(test_class.test_method()) print("Kill and restart the server and press return") sys.stdin.readline() try: print(test_class.test_method()) except EOFError: print('EOF received\n') # reestablish connection manager.connect() test_class = manager.Test() # trigger error print(test_class.test_method()) --- 8< -------------------------------------------------------------------- Running it in two terminals gives (only showing client side): --------------------------------------------------------------------------- $ ./python ~/test_mp client TEST Kill and restart the server and press return # hit <return> EOF received Traceback (most recent call last): File "/home/ethan/test_mp", line 45, in <module> print(test_class.test_method()) File "<string>", line 2, in test_method File "/source/virtualenv/lib/python3.9/multiprocessing/managers.py", line 808, in _callmethod conn.send((self._id, methodname, args, kwds)) File "/source/virtualenv/lib/python3.9/multiprocessing/connection.py", line 211, in send self._send_bytes(_ForkingPickler.dumps(obj)) File "/source/virtualenv/lib/python3.9/multiprocessing/connection.py", line 416, in _send_bytes self._send(header + buf) File "/source/virtualenv/lib/python3.9/multiprocessing/connection.py", line 373, in _send n = write(self._handle, buf) BrokenPipeError: [Errno 32] Broken pipe --------------------------------------------------------------------------- The problem appears to be that the call to `manager.connect()` after the EOF is not getting a new connection, but is reusing the old one (?). This is as far as I can take this; hopefully somebody with more multiprocessing/socket skills can take it from here. ---------- nosy: +davin, pitrou, serhiy.storchaka versions: +Python 3.10, Python 3.11, Python 3.9 -Python 3.8 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue43329> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com