Mailing List Archive

[issue43329] Multiprocessing Manager Client Not Reconnecting
Ethan Furman <ethan@stoneleaf.us> added the comment:

Michael Boon wrote:
-------------------
> The [above] issue is pretty serious and it is preventing me from using a
> system I wrote on a larger scale.

That statement suggests you were able to get this working on a small scale -- is that correct? What does the working small-scale code look like?

----------
nosy: +ethan.furman

_______________________________________
Python tracker <report@bugs.python.org>
<https://bugs.python.org/issue43329>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com
[issue43329] Multiprocessing Manager Client Not Reconnecting [ In reply to ]
Michael L. Boom <mikeboom@mikeboom.com> added the comment:

I don't think I even got this working on the small scale. The unit test in the bug report is about as small as it gets and it doesn't work. The issue still exists in Python 3.9.5.

----------

_______________________________________
Python tracker <report@bugs.python.org>
<https://bugs.python.org/issue43329>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com
[issue43329] Multiprocessing Manager Client Not Reconnecting [ In reply to ]
Ethan Furman <ethan@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 <report@bugs.python.org>
<https://bugs.python.org/issue43329>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/list-python-bugs%40lists.gossamer-threads.com