imexam
imexam copied to clipboard
"Address already in use" error at connection
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
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?