Async serial communication/threads sharing data

Nick Timkovich prometheus235 at gmail.com
Sat Mar 21 16:52:21 EDT 2009


I've been working on a program that will talk to an embedded device
over the serial port, using some basic binary communications with
messages 4-10 bytes long or so.  Most of the nuts and bolts problems
I've been able to solve, and have learned a little about the threading
library to avoid blocking all action while waiting for responses
(which can take 50 ms to 10 s).  Ultimately, this program will test
the device on the COM port by sending it messages and collecting
responses for 10k-100k cycles; a cycle being:
 1. tell it to switch a relay,
 2. get it's response from the event,
 3. ask it for some measurements,
 4. get measurements,
 5. repeat.
Later I would like to develop a GUI as well, but not a big issue now
(another reason to use threads? not sure).

The overall structure of what I should do is not very apparent to me
on how to efficiently deal with the communications.  Have the main
loop handle the overall timing of how often to run the test cycle,
then have a thread deal with all the communications, and within that
another thread that just receives data?  My main issue is with how to
exchange data between different threads; can I just do something like
have a global list of messages, appending, modifying, and removing as
needed?  Does the threading.Lock object just prevent every other
thread from running, or is it bound somehow to a specific object (like
my list)?



More information about the Python-list mailing list