数年間開発やテストを行っている人はよく混乱しますが、新しい機能の開発や古い機能のメンテナンスは基本的にコードの山です。この記事では、誰でも学べるシステム設計とアーキテクチャにおけるパフォーマンスの最適化について主に説明しますが、一部の内容は特定の製品に関係するものであり、一部変更が加えられたり、テスト コードのデモが別途作成されたりしています。
プロジェクトの背景:
高性能直径テスト ツールを実装し、1000 件を受け入れ、1000 件を送信し、両方向で 1 秒あたり最大 2000 件のメッセージをサポートします。 。 Diameter プロトコルのソース コードは http://sourceforge.net/projects/pyprotosim/ からダウンロードされます。このオープン ソース パッケージは SMPP、RADIUS、DHCP、LDAP もサポートしており、新しく追加されたプロトコル フィールドは辞書で構成できます。コードを変更する必要がある場合に非常に便利です。初期段階では、機能を実装するためにパフォーマンスの問題は考慮されておらず、多くの場所でシングル スレッドが使用され、初期パフォーマンスでは 50 メッセージしかサポートできませんでした。ハードウェア環境: SunFire 4170、16 コア、コアあたり 2.4 G
Python パフォーマンス最適化のためのいくつかの方向性:
1. Python パーサーを変更します: 一般的な Python パーサーには、pysco、pypy、cython、jython、および pysco no が含まれます。 Python 2.7のサポートが長くなったのでテストは不要ですが、C言語と同等の速度で動作すると言われています。 pypy と jython で簡単なテストを行いました。pypy は異なるマシン上で 5 ~ 10 倍に改善できます。Jython は Python GIL の問題を回避できますが (jython は Java 仮想マシン上で実行されるため)、テストによると効率が低いようです。利益は最小限です。
2. コードを最適化する
3. システム アーキテクチャ、マルチスレッド、マルチプロセス、またはコルーチンを変更する
解決策 1 : Python パーサーを変更する
Python パーサーを変更することでパフォーマンス要件を満たすことができる場合、それが最も安価な解決策であり、コードを変更する必要はありません。次のコードは pypy の効果を説明するためのもので、別に書かれたテスト コードであり、Windows で実行した結果です。 Linux マシンでは実行効果がさらに向上します。
#!/usr/bin/env python #coding=utf-8 import time def check(num): a = list(str(num)) b = a[::-1] if a == b: return True return False def test(): all = xrange(1,10**7) for i in all: if check(i): if check(i**2): i**2 if __name__ == '__main__': start=time.time() test() print time.time()-start
Python と pypy をそれぞれ使用した結果
C:\Python27\python.exeD:/RCC/mp/src/test.py
14.4940001965
C:\pypy-2.1\pypy.exeD:/RCC/mp/src/test.py
4.37800002098
の実行結果が表示されます。 pypy 効果は依然として明らかですが、(Linux マシンの場合) 5 倍の 50*5 に増やすことができますが、これはまだ 2000 には程遠いです。 pypy は、後で説明する Python のマルチスレッド サポートに明らかな影響を与えません。
まず終わりにしましょう。長すぎてみんな疲れているようです。次の記事ではコードの最適化部分を紹介します。
[おすすめコース: Python ビデオ チュートリアル ]
以上がPython を使用して高性能テスト ツールを実装する (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。