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