Wer mehrere Jahre lang entwickelt oder getestet hat, fühlt sich oft verwirrt. Die Entwicklung neuer Funktionen oder die Wartung alter Funktionen sind im Grunde ein Haufen Code. In diesem Artikel geht es hauptsächlich um die Leistungsoptimierung im Systemdesign und in der Architektur, damit jeder etwas lernen kann. Einige Inhalte betreffen bestimmte Produkte, einige Änderungen wurden vorgenommen oder Testcode-Demonstrationen wurden separat geschrieben.
Projekthintergrund:
Implementieren Sie ein leistungsstarkes Durchmessertesttool, akzeptieren Sie 1000 + senden Sie 1000 und unterstützen Sie bis zu 2000 Nachrichten pro Sekunde in beide Richtungen . Der Quellcode des Diameter-Protokolls wird von http://sourceforge.net/projects/pyprotosim/ heruntergeladen. Dieses Open-Source-Paket unterstützt auch SMPP, RADIUS, DHCP, LDAP und die neu hinzugefügten Protokollfelder können im Wörterbuch konfiguriert werden. Dies ist sehr praktisch, wenn Sie den Code ändern müssen. In der Anfangsphase haben wir bei der Implementierung von Funktionen an vielen Stellen keine Leistungsprobleme berücksichtigt, und die anfängliche Leistung konnte nur 50 Nachrichten unterstützen. Hardwareumgebung: SunFire 4170, 16 Kerne, 2,4 G pro Kern
Mehrere Richtungen zur Python-Leistungsoptimierung:
1. Ändern Sie den Python-Parser: Zu den gängigen Python-Parsern gehören Pysco, Pypy, Cython, Jython und Pysco-Nr Unterstützt Python 2.7 nicht mehr, daher gibt es keinen Test. Es wird gesagt, dass es genauso schnell läuft wie die C-Sprache. Ich habe einen einfachen Test mit Pypy und Jython durchgeführt. Obwohl Jython das Problem von Python GIL vermeiden kann (da Jython auf einer virtuellen Java-Maschine ausgeführt wird), scheint dies der Fall zu sein Effizienz Die Gewinne sind minimal.
2. Optimieren Sie den Code
3. Ändern Sie die Systemarchitektur, Multithreading, Multiprozess oder Coroutine
Option 1: Ändern des Python-Parsers
Wenn ein Ändern des Python-Parsers die Leistungsanforderungen erfüllen kann, ist es die günstigste Lösung und erfordert keine Änderungen am Code. Der folgende Code dient nur zur Veranschaulichung der Wirkung von Pypy. Es handelt sich um einen separat geschriebenen Testcode und das Ergebnis der Ausführung unter Windows. Der Laufeffekt ist auf einem Linux-Rechner besser.
#!/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
Die Ergebnisse der Ausführung von Python bzw. Pypy
C:Python27python.exeD:/RCC/mp/src/test.py
14.4940001965
C:pypy-2.1pypy.exeD:/RCC/mp/src/test.py
4.37800002098
Es ist ersichtlich, dass die Auswirkung der laufenden Ergebnisse von Pypy ist immer noch offensichtlich. Obwohl es um das Fünffache erhöht werden kann (auf einem Linux-Computer), 50 * 5, ist es immer noch weit von 2000 entfernt. Pypy hat keinen offensichtlichen Einfluss auf die Python-Multithreading-Unterstützung, was später erwähnt wird.
Beenden wir es jetzt. Der Codeoptimierungsteil wird im nächsten Artikel vorgestellt.
[Empfohlener Kurs: Python-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonVerwendung von Python zur Implementierung leistungsstarker Testtools (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!