serial ports, threads and windows

Pekka Niiranen pekka.niiranen at wlanmail.com
Thu Aug 3 05:52:50 EDT 2006


Tom Brown wrote:
> Hey people,
> 
> I've written a python app that r/w eight serial ports to control eight devices 
> using eight threads. This all works very nicely in Linux. I even put a GUI on 
> it using PyQt4. Still works nicely. 
> 
> Then I put the app on on a virtual Windows machine running inside of vmware on 
> the same Linux box.  Vmware only lets me have four serial ports so I run the 
> app against four serial ports using four threads. The app did not respond 
> quick enough to data from the serial ports and eventually hung.
> 
> So, I tried one serial port and the app still did not respond quick enough to 
> the single serial port. It eventually hangs.
> 
> When the app hung, in each case, it was not hogging the cpu nor reading any 
> data off the serial ports. The task manager didn't show it was doing anything 
> at all.
> 
> When it runs on Windows, could it be:
> 
> 1) Just struggling to run inside of VMware?
> 
> 2) Using threads with Qt on Windows is a problem?
> 
> 3) Threads in python on Windows is a problem?
> 
> Any ideas?
> 
> Thanks,
> Tom

Hi,

I have been using wxpython myself with pyserial in Windows 2000/XP.
No problems. Below are (edited) code segments. The "self.jam" is
used for stopping serial port processing without stopping the thread.

-------- thread example starts --------------------

class T1Thread(Thread):
     def __init__(self, inport):
         Thread.__init__(self)
         self._want_abort = 0
         self.inprt = inport	# COMx
         self.inprt.flushInput()
         self.run_count = 0
	#
         self.jam = false
	#
         self.start()

     def run(self):
         while self._want_abort == 0:
             if not self.jam:
                 self.read_simulations()
             sleep(1)

     def abort(self):
         self._want_abort = 1	# Stop from GUI


     def read_simulations(self):
	..blah..blah..
	self.inprt.flushInput()
	sleep(5)

-------- thread example ends --------------------

-------- Wxpython code starts --------------------

     def OnRun(self, event):
         if self.in_port != "No" and not self.T1worker:
             self.T1worker = T1Thread(self.inprt)
         if self.out_port != "No" and not self.T2worker:
             self.T2worker = T2Thread(self.outprt)
         if self.in2_port != "No" and not self.T3worker:
             self.T3worker = T3Thread(self.in2prt)


     def OnStop(self, event):
         if self.T1worker:
             self.T1worker.abort()
         if self.T2worker:
             self.T2worker.abort()
         if self.T3worker:
             self.T3worker.abort()
         sleep(3)
         self.T1worker= None
         self.T2worker= None
         self.T3worker= None
         print "\nSTOPPED\n"

-------- Wxpython code ends --------------------

-pekka-



More information about the Python-list mailing list