Я пытаюсь ускорить мой скрипт. Он в основном читает файл pcap с информацией Lidar HDL-32 от Velodyne и позволяет мне получать значения X, Y, Z и Intensity. Я профилировал свой сценарий, используя python -m cProfile ./spTestPcapToLas.py
, и он тратит больше всего времени на мои вызовы функций readDataPacket()
. В небольшом тесте (файл 80 МБ) часть распаковки занимает около 56% времени выполнения.Ускорить работу python struct.unpack
я называю 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, Intensity.
Это привело к увеличению скорости на 30 раз для этой конкретной функции. Огромное спасибо. : D –