0

私はpython.Aimを使用してファイル操作を試みています。サイズ(100バイト)のファイルを継続的に読み取り、パックしてソケット経由で送信することです。これらのファイルはディレクトリから読み取られます。

問題: プログラムを連続して実行すると、実行時間が長くなります。最初の実行時間は 1 秒未満です。後で8~10秒まで到達します。遅延の正確な理由を知ることができません。誰かが問題に光を当てることができれば、より役に立ちます.

ここに私のコードを添付しました...

def handlefile(filename):
        for sat in range(len(Numfiles)):
                filename = 
                fsize = os.path.getsize(filename)
                if fsize != 100:
                        continue
                rfile = open(filename,'rb')
                text = rfile.read()
                msg = struct.unpack("<100b",text)
                for i in range(len(msg)):
                        packMessage  = packMessage + struct.pack("<b",msg[i])
                print "time:",datetime.datetime.now() - startTime

ファイルはバイナリファイルです。

初期所要時間: 671 ミリ秒

10回以上連続して実行すると、時間がゆっくりと増加します。最後のいくつかの値、671ms . . . . 9.879 ミリ秒 88.686 ミリ秒 135.954 ミリ秒

私は python-2.5.4 バージョンを使用しています。

誰かが同様の問題に遭遇した場合。いくつか入力してください。

ありがとうダス

4

2 に答える 2

4

私が見るところ、packMessage単調に成長しています:

packMessage  = packMessage + struct.pack("<b",msg[i])

これを何度も繰り返すと、サイズが大きくなり、多くのメモリを消費し、ある時点でアプリケーションが非常に遅くなる可能性があります。プログラムを実行するときにtopまたはを見てみてください( で、 を押してメモリ割り当てで並べ替え、常駐メモリ フィールドを追加します)。htoptopMf

また、毎回同じファイルを開いて読み取ることは、パフォーマンスの観点からは最善の解決策ではありません。ループに入る前に一度だけ読むことを検討してください。

于 2010-10-27T10:34:05.093 に答える
3

プロセスが開いているファイルハンドルの数を確認しましたか? with ステートメントを使用して、不要になったときに確実に閉じられるようにすることもできます。

with open(filename, 'rb') as rfile:
    text = rfile.read()
    # etc.

-blockwithを残すと、ファイルは自動的に閉じられます。

于 2010-10-27T10:10:33.977 に答える