-1

私は、ソフトウェア アプリケーションを作成するプロジェクトを準備していました。実行速度が非常に遅いことを除いて、完全で正常に動作しています..コードのいくつかのチャンクを取得して最適化しました..

私はpsycoを試しました..つまり、psycoをインストールし、コードの上部に2行追加しました

import psyco
psyco.full()

これがサイコを使用する方法であるかどうかはわかりません..これが間違っている場合。psycoの使い方を教えてください..これを追加しても改善が見られなかったので..

プロファイリングを試してみましたが、コード行に時間がかかることはわかっていますが、これらはさらに最適化することはできず、避けられないコード行です..

また、いくつかのpythonパッケージを使用して「c」のコードを書き直すオプションも考えました..しかし、基本的なpythonの一部ではない追加のpythonパッケージを使用することで、常に非常に悪い経験をしました..

私はpython 2.6とwindows vistaを使用しています..コード全体の実行速度を大幅に向上させる方法を教えてください..少なくとも5倍..お願いします..

私はメソッドでコードを書いていません.あなたの間にいくつかのメソッドがあります..メインはありません..

はい、私がIOバウンドの問題であると示唆する人はほとんどいません..コードを約500回呼び出す必要があり、これには呼び出しごとに少なくとも2つのファイルの開閉が含まれます..

ここで.pmファイルを開くと、2つの列があり、最初の列のみが必要なので、最初の列全体をリストにコピーし、それを関数に渡して行番号を取得し、他のファイルを開いて取得しますその行番号の要素をリストに...

これは私が望んでいたタスクです...最初の列の要素をリストにロードするのは時間がかかると思います..

IO バウンドのボトルネックのパフォーマンスを改善するにはどうすればよいですか

必死に助けを求める

4

6 に答える 6

3

バイナリ ファイル形式に切り替えることができれば、パフォーマンスが大幅に向上する可能性があります。コードのほとんどは、解析と文字列操作を行っています。文字列を浮動小数点数に変換する作業が多く、思ったよりも遅いです。

于 2010-06-22T06:29:16.243 に答える
1

コードを微調整するだけで、パフォーマンスが 5 倍になることはほとんどありません。

まず、アルゴリズムの改善を検討する必要があります。仕事に最適なデータ構造を使用していますか? おそらく、適切な場所で adictまたは aを使用するsetと、コードが大幅に高速化される可能性があります。

C モジュールを作成することはそれほど難しいことではなく、Python コードを改善する方法が見つからない場合の別のオプションです。通常、C コードを使用すると、5 倍以上の速度向上が期待できます。

多分あなたの問題はIOバウンドです。次に、IO のパフォーマンスを改善する方法を検討する必要があります。

ここでさらにヘルプが必要な場合は、コードを表示するか、少なくともプログラムの機能を説明する必要があります。

更新: Windows で非常に遅くなる傾向がある多くのファイルを開いたり閉じたりしているようです。

于 2010-06-22T05:23:30.623 に答える
0

ボットがcythonを使用しようとするのはなぜですか?コードを変更しなくても、パフォーマンスが大幅に向上するはずです。少し変更を加えるだけで、これはさらに役立つはずです。

于 2010-06-22T06:53:54.540 に答える
0

コードを最適化して速度を上げるには、コードをプロファイリングして問題の場所を確認するだけです。推測は役に立ちません。しかし、いったんどこが分かれば、通常は、アルゴリズムの改善、より適切なデータ構造の使用、リソースのボトルネックの除去 (io、メモリ、cpu)、メモリ割り当ての削減、コンテキスト切り替えの削減 (プロセスとサブルーチン)。

于 2010-06-22T05:25:58.237 に答える
0

psyco は、インポートして psyco.full() を呼び出すだけで簡単に使用できます。したがって、サイコの使用法については正しいです。

C/C++ を使用して Python モジュールを構築しようとしている場合は、boost::python をご覧ください。

さらに分析するために、実際にコードを投稿する必要があります。

于 2010-06-22T05:18:26.460 に答える
0

最適化の 1 つの機会を次に示します。非常によく似た引数を使用して、get_list を 2 回呼び出しています。

join_cost_index_end[index] = get_list(file, float(abs1), fout)
join_cost_index_strt[index] = get_list(file, float(abs2), fout)

これは、get_list での作業のほとんどが正当な理由もなく 2 回行われていることを意味します。get_list が 1 回呼び出されるように書き直して、index_end と index_strt の両方を同時に返すようにします。

于 2010-06-22T06:17:35.723 に答える