spacetelescope / imexam

imexam is a python tool for simple image examination, and plotting, with similar functionality to IRAF's imexamine
http://imexam.readthedocs.io
BSD 3-Clause "New" or "Revised" License
74 stars 45 forks source link

"Address already in use" error at connection #173

Open bsipocz opened 5 years ago

bsipocz commented 5 years ago

I'm playing with the example notebook example_notebooks/imexam_ginga_example.ipynb. Third cell (a=imexam.connect(viewer='ginga')) given the following error.

I may have other sessions open from separate ipython terminals, but even if that is the case, I would have expect a new session being opened.

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-4-4ecd2ce0ba6b> in <module>()
----> 1 a=imexam.connect(viewer='ginga') #stars up a new tab with the ginga HTML5 viewer

/usr/local/lib/python3.7/site-packages/imexam/connect.py in __init__(self, target, path, viewer, wait_time, quit_window, port)
    102             self.window = ginga(exam=self.exam,
    103                                 close_on_del=quit_window,
--> 104                                 port=port)
    105             # the viewer will track imexam with callbacks
    106             self._event_driven_exam = True

/usr/local/lib/python3.7/site-packages/imexam/ginga_viewer.py in __init__(self, exam, close_on_del, logger, port, host, use_opencv)
    927 
    928         super(ginga, self).__init__(exam=exam, close_on_del=close_on_del,
--> 929                                     logger=logger, port=self._port)
    930 
    931     def _open_browser(self):

/usr/local/lib/python3.7/site-packages/imexam/ginga_viewer.py in __init__(self, exam, close_on_del, logger, port)
    145 
    146         # create the viewer specific to this backend
--> 147         self._create_viewer(bind_prefs, viewer_prefs)
    148 
    149         # TODO: at some point, it might be better to simply add a custom

/usr/local/lib/python3.7/site-packages/imexam/ginga_viewer.py in _create_viewer(self, bind_prefs, viewer_prefs, opencv, threads)
    950         self._threads = threads
    951         self._server = None
--> 952         self._start_server()
    953 
    954         self.ginga_view = self._server.get_viewer('Imexam Display')

/usr/local/lib/python3.7/site-packages/imexam/ginga_viewer.py in _start_server(self)
    997             no_ioloop = True  # jupyter console and notebook
    998 
--> 999         self._server.start(no_ioloop=no_ioloop)
   1000 
   1001     def _shutdown(self):

/usr/local/lib/python3.7/site-packages/ginga/web/pgw/ipg.py in start(self, use_thread, no_ioloop)
    425         ], factory=self.factory, logger=self.logger)
    426 
--> 427         self.http_server = self.server.listen(self.port, self.host)
    428 
    429         if no_ioloop:

/usr/local/lib/python3.7/site-packages/tornado/web.py in listen(self, port, address, **kwargs)
   2040         from tornado.httpserver import HTTPServer
   2041         server = HTTPServer(self, **kwargs)
-> 2042         server.listen(port, address)
   2043         return server
   2044 

/usr/local/lib/python3.7/site-packages/tornado/tcpserver.py in listen(self, port, address)
    141         the `.IOLoop`.
    142         """
--> 143         sockets = bind_sockets(port, address=address)
    144         self.add_sockets(sockets)
    145 

/usr/local/lib/python3.7/site-packages/tornado/netutil.py in bind_sockets(port, address, family, backlog, flags, reuse_port)
    166 
    167         sock.setblocking(0)
--> 168         sock.bind(sockaddr)
    169         bound_port = sock.getsockname()[1]
    170         sock.listen(backlog)

OSError: [Errno 48] Address already in use
sosey commented 4 years ago

I think this is a rolling bug, I can't reproduce on my end right now. I do have logic in the server startup that tries to pick an open port, it could probably use improving. @bsipocz do you get this issue every time you startup?