我正在尝试加快我的脚本。它基本上读取带有 Velodyne 的 Lidar HDL-32 信息的 pcap 文件,并允许我获取 X、Y、Z 和强度值。我已经使用我的脚本来分析我的脚本,它在我的函数调用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、强度计算。