On Thu, Oct 1, 2009 at 9:10 PM, Omer Zak <[email protected]> wrote:
> I am developing a Python application, which reads bytes from a serial
> port (using pySerial).
> Those bytes combine into packets by means of a non-trivial set of rules.
>
> Using a chain of generators, I implemented the rules in a
> straightforward way.  A generator reads bytes from the serial port,
> processes escape sequences and yields the resulting characters to
> another generator.  The next generator delimits packets and yields each
> packet as a unicode string.  The final generator parses the unicode
> strings and yields the parse results for each frame as a data structure
> (a Dict, whose elements are the various packet fields).
>
> However, the ultimate input of the generators needs to be from the
> serial port.
>
> The question: do I have to use a separate thread for reading bytes from
> the serial port (by means of the first generator in chain) and then use
> some complicated mechanism for transferring the yielded data structures
> to another thread?

It depends. If you can effort single-thread & busy-wait - just do it
this way. It is easy to understand and support. If you don't, than
welcome to a wonderful world of asynchronous IO.  In this case I
suggest you to read http://www.kegel.com/c10k.html article. Also it
talks about web servers, but the solutions are applicable to your
problem too.

> The reads in such a case would be blocking reads.
>
> Or is there another idiom for feeding data for processing by a chain of
> generators, which can relieve me from having to use a separate thread?

I am not sure whether you can completely avoid threads, but a good
async. package/library can simplify a lot of things. Boost.Asio ( C++
) does it very well.

HTH

-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
_______________________________________________
Python-il mailing list
[email protected]
http://hamakor.org.il/cgi-bin/mailman/listinfo/python-il

לענות