スクリプトを高速化しようとしています。これは基本的に、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
プロセスをスピードアップする方法についてのアイデアはありますか? ちなみに、X、Y、Z、Intensity の計算には numpy を使用しています。