Oia*_*Sam 0 python performance scapy cython
我花了一整天等待一个循环,没有希望退出!我知道python在性能方面不是那么高效,我真的很感激任何加速建议来解决我的问题.
我使用wireshark捕获了大量数据包(大约500,000个)并将它们保存到.pcap文件中.之后,我使用Scapy rdpcap()函数从保存的文件中读取数据包,然后在循环中访问每个数据包以提取源IP地址.我的代码如下:
from scaly.all import *
srcList =[]
Packets = rdpcap("pcapfile")
for pkt in Packets:
src = Packets[Packets.index(pkt)][1].src
srcList.append(src)
Run Code Online (Sandbox Code Playgroud)
注意:我已经做了一些挖掘,我发现Cython用于加速嵌套循环,但老实说我不知道如何在我的情况下使用它.任何见解都会很棒
如果我没有误解你的意图,你可以简化你的代码,这也应该加快它:
from scaly.all import *
Packets = rdpcap("pcapfile")
srcList = [pkt[1].src for pkt in Packets]
Run Code Online (Sandbox Code Playgroud)
这个解决方案与您的解决方案之间的区别可以用一个简单的例子来说明.如您所见,第二个功能的速度提高了10倍以上.
In [1]: lst = range(100)
In [2]: def f1(lst):
...: out = []
...: for item in lst:
...: out.append(lst[lst.index(item)])
...: return out
In [3]: def f2(lst):
...: return [item for item in lst]
In [4]: %timeit f1(lst)
1000 loops, best of 3: 221 us per loop
In [5]: %timeit f2(lst)
100000 loops, best of 3: 9.61 us per loop
Run Code Online (Sandbox Code Playgroud)