Re: serial ports, threads and windows



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-
.



Relevant Pages

  • Re: serial port access from asp.net
    ... The Windows API calls for serial ports don't ... >> by many people you cannot access serial ports from ASP.net. ... > app not work in an ASP.Net app? ...
    (microsoft.public.dotnet.framework.aspnet)
  • Re: serial ports, threads and windows
    ... This all works very nicely in Linux. ... Then I put the app on on a virtual Windows machine running inside of vmware ... the app against four serial ports using four threads. ... python app with many threads posting messages to the main application. ...
    (comp.lang.python)
  • Re: How far can Clarion go?
    ... then NetTalk would allow direct communication with the devices themselves. ... Just to be clear, If the devices don't have Serial Ports, it would not work? ... I also like WinEvent, and NetTalk, but unlike the others I _am_ a salesman! ... When I needed my app to work on the Internet, I used Clarionet. ...
    (comp.lang.clarion)
  • Re: serial port access from asp.net
    ... >I use the serial port code that was published in MSDN magazine. ... > by many people you cannot access serial ports from ASP.net. ... Why would code that is written for, and works for a Windows Forms ... app not work in an ASP.Net app? ...
    (microsoft.public.dotnet.framework.aspnet)
  • serial ports, threads and windows
    ... I've written a python app that r/w eight serial ports to control eight devices ... This all works very nicely in Linux. ... Then I put the app on on a virtual Windows machine running inside of vmware on ...
    (comp.lang.python)