2

現在、MACアドレスを含む文字列を比較する必要があります(例:Python 2.7を使用した「11:22:33:AA:BB:CC」。現在、MACアドレスを含む事前構成済みのセットがあり、スクリプトが繰り返されますセットを介して、新しい各MACアドレスをリスト内のアドレスと比較します。これはうまく機能しますが、セットが大きくなるにつれて、スクリプトの速度が大幅に低下します。わずか100程度で、大きな違いに気付くことができます。

このプロセスをスピードアップするためのアドバイスはありますか?それらをセットで保存するのが比較するのに最適な方法ですか、それともたとえばCSV / DBに保存する方が良いですか?

コードのサンプル...

def Detect(p): 
    stamgmtstypes = (0,2,4)
    if p.haslayer(Dot11):
        if p.type == 0 and p.subtype in stamgmtstypes:
            if p.addr2 not in observedclients: 
                # This is the set with location_mutex: 
                detection = p.addr2 + "\t" + str(datetime.now())
                print type(p.addr2)
                print detection, last_location
                observedclients.append(p.addr2) 
4

3 に答える 3

1

まず、ボトルネックがどこにあるかを正確に理解するために、コードをプロファイリングする必要があります...

また、一般的な推奨事項として、サイコが役に立たない場合が数回ありますが、サイコを検討してください

ボトルネックを見つけたら、cythonが役立つかもしれませんが、cython ソースですべての変数を宣言する必要があります。

于 2011-10-21T10:53:37.763 に答える
0

を使ってみてくださいset。set use を宣言するにはset()、notを使用します[](後者は空の を宣言するためlist)。

のルックアップlistO(n)複雑です。nそれは、リストが大きくなるとあなたの場合に起こることです( asの成長とともに複雑さが増しますO(n))。

のルックアップはsetO(1)平均して複雑です。

http://wiki.python.org/moin/TimeComplexity

また、コードの一部を変更する必要があります。にはappendメソッドがないsetので、 のようなものを使用する必要がありますobservedclients.add(address)

于 2011-10-21T10:55:26.523 に答える