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
