improving performance of writing into a pipe
mikprog at gmail.com
mikprog at gmail.com
Tue Feb 19 07:10:35 EST 2013
On Monday, February 18, 2013 7:29:09 PM UTC, Serhiy Storchaka wrote:
> On 18.02.13 17:12, mikprog at gmail.com wrote:
>
> > on an embedded linux system (BeagleBoard) I am writing data coming from bluetooth dongle into a pipe.
>
> > The function is the following one:
>
> >
>
> >
>
> > def write_to_pipe(line):
>
> >
>
> > # next line ensures that bytes like '0x09' are not translated into '\t' for
>
> > #example, and they are sent as such
>
> > hexbytes = "\\x" + "\\x".join([hex(ord(c))[2:].zfill(2) for c in line])
>
> > wrap = ["echo -en '", "' > /tmp/mypipe"]
>
> > msg = hexbytes.join(wrap)
>
> > print "DBG: sending: ", msg
>
> >
>
> > try:
>
> > os.popen( msg )
>
> > except:
>
> > print "Error: write_to_pipe has failed!"
>
> >
>
> >
>
> > Now I typically receive 4 bytes from the bluetooth dongle and that is fine.
>
> > However when I receive many more than that it seems that the writing into the pipe is too slow.
>
> >
>
> > Is there any clever/obvious way to improve the code above?
>
> > (I am quite sure there is to be honest).
>
>
>
> def write_to_pipe(line):
>
> hexbytes = ''.join('\\x%02x' % ord(c) for c in line)
>
> with open('/tmp/mypipe', 'w') as f:
>
> f.write(hexbytes)
I'll take your hexbytes = '' line (which is surely more efficient than mine).
However whit this approach open + write it seems the pipe doesn't get the data...
I am not sure what is going on.
At this point I suspect it could be a problem on the pipe itself (which I inherited).
It is just weird that the pipe accept this correctly:
wrap = ["echo -en '", "' > /tmp/midi"]
msg = hexbytes.join(wrap)
os.popen( msg )
but seems to be careless of approach open + write.
I need to investigate there.
Thanks a lot, to you and to everyone else.
Mik
More information about the Python-list
mailing list