[英]Speeding Up Data Transfer Using Pyserial in Python
我已经使用python和pyserial模块创建了一个数据传输程序。 我目前正在使用它在Raspberry Pi和计算机之间通过无线电设备传递文本文件。 问题是,我要发送的文件包含5000行文本,大小为93.0 Kb,要花很长时间才能发送。 确切地说,大约需要一整分钟。 我需要在几秒钟内完成。 这是下面的代码,我确信可以通过文件读取进行许多优化,从而可以提高数据传输速度。 我的无线电设备的数据速度为250 kbps,显然没有达到。 任何帮助将不胜感激。
发送代码(位于树莓派上)
def s_file():
print 'start'
readline = lambda : iter(lambda:ser.read(1),"\n")
name = "".join(readline())
print name
file_loc = directory_name + name
sleep(1)
print('Waiting for command from client to send file...')
while "".join(readline()) != "<<SENDFILE>>":
pass
with open(file_loc) as FileObj:
for lines in FileObj:
ser.write(lines)
ser.write("\n<<EOF>>\n")
print 'done'
接收代码(在我的笔记本电脑上)
def r_f_bird(self): #send command to bird to start func,
if ser_open == True:
readline = lambda : iter(lambda:ser.read(1),"\n")
NAME = self.tb2.get()
ser.write('/' + NAME)
print NAME
sleep(0.5)
ser.write('\n<<SENDFILE>>\n')
start = clock()
with open(str(NAME),"wb") as outfile:
while True:
line = "".join(readline())
if line == "<<EOF>>":
break
print >> outfile, line
elapsed = clock() - start
print elapsed
ser.flush()
else:
pass
也许ser.read(1)
的开销正在减慢速度。 似乎每一行的末尾都有一个\\n
,因此请尝试使用pySerial的readline()
方法,而不要滚动自己的方法。 应该将line = "".join(readline())
更改为line = ser.readline()
即可。 您还需要将循环结束条件更改为== "<<EOF>>\\n"
。
您可能还需要在书写侧添加一个ser.flush()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.