multiprocessing BaseManager doesn't clean up net connections?

C

Chris Brooks

Hi,

I'm trying to use remote managers in the multiprocessing module to listen
for some events synchronously while my program goes off and does other
things. I use the .start() method which forks a new process to handle
communication. When I catch the sigint and call sys.exit() though, the
network port is still bound even after the python interpretor finishes.
Here is my short code and the output:

from multiprocessing.managers import BaseManager
import threading
import sys
import signal
import time

class WorkManager(BaseManager):
def __init__(self):
BaseManager.__init__(self,address=('', 51114), authkey='chris')
self.register('get_string', callable=self.getString)

def getString(self):
return "hi"

manager = WorkManager()
manager.start()

def quit( arg1, arg2 ):
sys.exit()

signal.signal(signal.SIGINT, quit)

#busy wait
while 1:
time.sleep(1)



cab938@ubuntu:~$ python2.6 server.py
^Ccab938@ubuntu:~$ python2.6 server.py
Process WorkManager-1:
Traceback (most recent call last):
File "/usr/local/lib/python2.6/multiprocessing/process.py", line 231, in
_bootstrap
self.run()
File "/usr/local/lib/python2.6/multiprocessing/process.py", line 88, in
run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python2.6/multiprocessing/managers.py", line 517, in
_run_server
server = cls._Server(registry, address, authkey, serializer)
File "/usr/local/lib/python2.6/multiprocessing/managers.py", line 136, in
__init__
self.listener = Listener(address=address, backlog=5)
File "/usr/local/lib/python2.6/multiprocessing/connection.py", line 97, in
__init__
self._listener = SocketListener(address, family, backlog)
File "/usr/local/lib/python2.6/multiprocessing/connection.py", line 217,
in __init__
self._socket.bind(address)
File "<string>", line 1, in bind
error: [Errno 98] Address already in use
Traceback (most recent call last):
File "server.py", line 16, in <module>
manager.start()
File "/usr/local/lib/python2.6/multiprocessing/managers.py", line 499, in
start
self._address = reader.recv()
EOFError
cab938@ubuntu:~$


Comments? Is this a bug, or is there a better way to clean up the manager
myself before shutting down?

Chris
 
G

gaius.julius

Hi,

Having exactly the same problem. It appears even if I explicitly call
manager's shutdown() method.

Not sure it is a bug, though.

But also didn't find anything in documentation or source code or debug
output.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top