Python hangs: Problem with wxPython, threading, pySerial, or events?
Ethan Swint
eswint at vt.edu
Mon Oct 17 15:55:58 EDT 2011
I just wanted to bump this back onto the list since I posted over the
weekend.
Thanks,
Ethan
On 10/15/2011 11:17 AM, Ethan Swint wrote:
> Hi-
>
> I'm experiencing crashes in my Win32 Python 2.7 application which
> appear to be linked to pyzmq. At the moment, I can't even kill the
> "python.exe *32" process in the Windows Task Manager. I'm running the
> script using Ipython by calling
>
> C:\Python27\pythonw.exe
> "/python27/scripts/ipython-qtconsole-script.pyw" -pylab
>
> but I also experience similar behavior when running within Eclipse.
> I've included an error message at the end which appears in the Windows
> 'cmd' window, but the message is not reflected in the pylab window.
>
> My attached device is transmitting <160><1><2><3><4><80> and is
> received correctly when I run the sample pyserial script
> 'wxTerminal.py'. In my application, however, the message appears to
> get characters out of order or drop bytes.
>
> If there's a better place to post or if you'd like more info, let me
> know.
>
> Thanks,
> Ethan
>
> ------------------Serial Port Listening
> Thread----------------------------------------
> def MotorRxThread(self):
> """Thread that handles the incoming traffic. Does buffer input and
> generates an SerialRxEvent"""
> while self.alive.isSet(): #loop while alive event is
> true
> text = self.serMotor.read(1) #read one, with timeout
> if text: #check if not timeout
> n = self.serMotor.inWaiting() #look if there is more to read
> if n:
> text = text + self.serMotor.read(n) #get it
> #log to terminal
> printstring = "MotorRxThread: "
> for b in text:
> printstring += str(ord(b)) + " "
> print printstring
> #pdb.set_trace()
> if self.motorRx0.proc_string(text):
> print "Message: cmd: " + str(self.motorRx0.cmd) + " data: "
> + str(self.motorRx0.data)
> event = SerialRxSpeedEvent(self.GetId(), text)
> self.GetEventHandler().AddPendingEvent(event)
> -----------------\Serial Port Listening
> Thread----------------------------------------
>
> ----------------Thread
> Start&Stop------------------------------------------------------
> def StartMotorThread(self):
> """Start the receiver thread"""
> self.motorThread = threading.Thread(target=self.MotorRxThread)
> self.motorThread.setDaemon(1)
> self.alive.set()
> self.motorThread.start()
>
> def StopMotorThread(self):
> """Stop the receiver thread, wait until it's finished."""
> if self.motorThread is not None:
> self.alive.clear() #clear alive event for thread
> self.motorThread.join() #wait until thread has finished
> self.motorThread = None
> self.serMotor.close() #close the serial port connection
> ----------------\Thread
> Start&Stop------------------------------------------------------
>
> -------------------Error message
> --------------------------------------------------------
> ValueError: '<IDS|MSG>' is not in list
> ([], ['<IDS|MSG>', '', '',
> '{"date":"2011-10-15T10:24:27.231000","username":"kernel","session":"82906c8a-1235-44d0-b65d-
> 0882955305c1","msg_id":"7cfcd155-bc05-4f47-9c39-094252223dab","msg_type":"stream"}',
> '{"date":"2011-10-15T10:24:27.23100
> 0","username":"kernel","session":"82906c8a-1235-44d0-b65d-0882955305c1","msg_id":"f4b88228-b353-4cfb-9bbe-ae524ee1ac38",
>
> "msg_type":"stream"}',
> '{"date":"2011-10-15T10:24:00.774000","username":"username","session":"9f393860-c2ab-44e9-820d-8f
> 08ae35044e","msg_id":"13a46e93-8da2-487b-ab12-6cae47b1ac34","msg_type":"execute_request"}',
> '{"date":"2011-10-15T10:24:0
> 0.774000","username":"username","session":"9f393860-c2ab-44e9-820d-8f08ae35044e","msg_id":"13a46e93-8da2-487b-ab12-6cae4
>
> 7b1ac34","msg_type":"execute_request"}', '{"data":"\\nMotorRxThread: 0
> MotorRxThread: 4 ","name":"stdout"}'])
> ERROR:root:Exception in I/O handler for fd <zmq.core.socket.Socket
> object at 0x03ADFCC0>
> Traceback (most recent call last):
> File
> "C:\Python27\lib\site-packages\pyzmq-2.1.9-py2.7-win32.egg\zmq\eventloop\ioloop.py",
> line 291, in start
> self._handlers[fd](fd, events)
> File
> "C:\Python27\lib\site-packages\pyzmq-2.1.9-py2.7-win32.egg\zmq\eventloop\stack_context.py",
> line 133, in wrapped
> callback(*args, **kwargs)
> File "C:\Python27\lib\site-packages\IPython\zmq\kernelmanager.py",
> line 448, in _handle_events
> self._handle_recv()
> File "C:\Python27\lib\site-packages\IPython\zmq\kernelmanager.py",
> line 458, in _handle_recv
> ident,msg = self.session.recv(self.socket)
> File "C:\Python27\lib\site-packages\IPython\zmq\session.py", line
> 585, in recv
> raise e
> ValueError: No JSON object could be decoded
> ERROR:root:Exception in I/O handler for fd <zmq.core.socket.Socket
> object at 0x03ADFCC0>
> Traceback (most recent call last):
> File
> "C:\Python27\lib\site-packages\pyzmq-2.1.9-py2.7-win32.egg\zmq\eventloop\ioloop.py",
> line 291, in start
> self._handlers[fd](fd, events)
> File
> "C:\Python27\lib\site-packages\pyzmq-2.1.9-py2.7-win32.egg\zmq\eventloop\stack_context.py",
> line 133, in wrapped
> callback(*args, **kwargs)
> File "C:\Python27\lib\site-packages\IPython\zmq\kernelmanager.py",
> line 448, in _handle_events
> self._handle_recv()
> File "C:\Python27\lib\site-packages\IPython\zmq\kernelmanager.py",
> line 458, in _handle_recv
> ident,msg = self.session.recv(self.socket)
> File "C:\Python27\lib\site-packages\IPython\zmq\session.py", line
> 579, in recv
> idents, msg_list = self.feed_identities(msg_list, copy)
> File "C:\Python27\lib\site-packages\IPython\zmq\session.py", line
> 609, in feed_identities
> idx = msg_list.index(DELIM)
> ValueError: '<IDS|MSG>' is not in list
> ---------------------------------------------------------------------------
>
> ZMQError Traceback (most recent call
> last)
> C:\Users\Ethan\<string> in <module>()
>
> C:\Python27\lib\site-packages\IPython\zmq\ipkernel.pyc in main()
> 671 """Run an IPKernel as an application"""
> 672 app = IPKernelApp.instance()
> --> 673 app.initialize()
> 674 app.start()
> 675
>
> C:\Python27\lib\site-packages\IPython\zmq\ipkernel.pyc in
> initialize(self=<IPython.zmq.ipkernel.IPKernelApp object>, arg
> v=None)
> 604 )
> 605 def initialize(self, argv=None):
> --> 606 super(IPKernelApp, self).initialize(argv)
> 607 self.init_shell()
> 608 self.init_extensions()
>
> C:\Python27\lib\site-packages\IPython\zmq\kernelapp.pyc in
> initialize(self=<IPython.zmq.ipkernel.IPKernelApp object>, ar
> gv=None)
> 213 self.init_session()
> 214 self.init_poller()
> --> 215 self.init_sockets()
> 216 self.init_io()
> 217 self.init_kernel()
>
> C:\Python27\lib\site-packages\IPython\zmq\kernelapp.pyc in
> init_sockets(self=<IPython.zmq.ipkernel.IPKernelApp object>)
> 148
> 149 self.shell_socket = context.socket(zmq.XREP)
> --> 150 self.shell_port = self._bind_socket(self.shell_socket,
> self.shell_port)
> 151 self.log.debug("shell XREP Channel on port:
> %i"%self.shell_port)
> 152
>
> C:\Python27\lib\site-packages\IPython\zmq\kernelapp.pyc in
> _bind_socket(self=<IPython.zmq.ipkernel.IPKernelApp object>,
> s=<zmq.core.socket.Socket object>, port=50104)
> 137 port = s.bind_to_random_port(iface)
> 138 else:
> --> 139 s.bind(iface + ':%i'%port)
> 140 return port
> 141
>
> C:\Python27\lib\site-packages\pyzmq-2.1.9-py2.7-win32.egg\zmq\core\socket.pyd
> in zmq.core.socket.Socket.bind (zmq\core\s
> ocket.c:4527)()
>
> ZMQError: Address in use
> ---------\ERROR MESSAGE--------------------------------------------------
>
More information about the Python-list
mailing list