我试图加快我的脚本速度。它基本上读取一个带有Velodyne的Lidar HDL-32信息的pcap文件,并使我能够获取X、Y、Z和Intensity值。我使用python -m cProfile ./spTestPcapToLas.py
对我的脚本进行了剖析,发现它在我的readDataPacket()
函数调用中花费了大量的时间。在一个小测试(80 MB文件)中,解包部分占用了执行时间的约56%。
我像这样调用readDataPacket
函数(chunk
指pcap文件):
packets = []
for packet in chunk:
memoryView = memoryview(packet.raw())
udpDestinationPort = unpack('!h', memoryView[36:38].tobytes())[0]
if udpDestinationPort == 2368:
packets += readDataPacket(memoryView)
readDataPacket()
函数本身是这样定义的:
def readDataPacket(memoryView):
firingData = memoryView[42:]
firingDataStartingByte = 0
laserBlock = []
for i in xrange(firingBlocks):
rotational = unpack('<H', firingData[firingDataStartingByte+2:firingDataStartingByte+4])[0]
startingByte = firingDataStartingByte+4
laser = []
for j in xrange(lasers):
distanceInformation = unpack('<H', firingData[startingByte:(startingByte + 2)])[0] * 0.002
intensity = unpack('<B', firingData[(startingByte + 2)])[0]
laser.append([distanceInformation, intensity])
startingByte += 3
firingDataStartingByte += 100
laserBlock.append([rotational, laser])
return laserBlock
你有什么想法可以加速这个过程吗?顺便说一下,我正在使用numpy进行X、Y、Z和强度的计算。