Pyserial轮询记忆

时间:2012-03-13 19:57:03

标签: python polling pyserial

import serial

ser = serial.Serial('COM5', baudrate=9600, parity=serial.PARITY_NONE, timeout=1)
print "connected to: " + ser.portstr
while ser.isOpen():
    line = ser.readline().strip()
    if len(line)==16:
        print "Id number is",line[5:-2]

ser.close()

我正在使用Pyserial连接到身份证阅读器,并希望进行持续的民意调查。如果我打印所有内容,我注意到每个超时都会导致readline存储一个空字符串。上面的代码改善了丑陋/无限输出的问题,但我担心内存使用情况。由于我正在重复使用“line”,我认为那里没有问题,但是开始时无限制的轮询存在问题吗?

谢谢

1 个答案:

答案 0 :(得分:1)

看起来很好 - 你不应该在那个循环中浪费内存,因为它不会保留对过去行的引用。

设置监视进程以查看内存消耗是否在一两天内增长不会对您造成伤害 - 但我不担心。

让我们假设你在一个512MB RAM的旧机器上运行它,并且只有200MB用于Python进程 - 并且readline的超时需要一秒钟,并且每个空字符串对象在内存中占用大约64个字节 - 你将在大约37天内没有RAM。