"Es skaliert sehr" oder etwas, das Sie gut schreiben. Ich war beeindruckt von den folgenden Neuigkeiten und habe mich daher entschlossen, Grumpy (Go running Python) auszuprobieren. Meine Navi-Nachrichten: Google entwickelt mit Go eine sehr skalierte Python-Ausführungsumgebung
Ich habe das Gefühl, dass das ursprüngliche Blog extrahiert wurde, um die Überschrift "Sehr skaliert" zu erstellen. Lesen wir also auch das ursprüngliche Blog (ehemaliges Blog) diagonal. ..
https://opensource.googleblog.com/2017/01/grumpy-go-running-python.html
《Very Scale》 Beschreibung: „Grumpy“ befindet sich noch im experimentellen Stadium, ist jedoch im Fib-Benchmark im Vergleich zu CPython hoch skalierbar.
=> Beschreibung im Originalblog.
In particular, Grumpy has no global interpreter lock, and it leverages Go’s garbage collection for object lifetime management instead of counting references. We think Grumpy has the potential to scale more gracefully than CPython for many real world workloads. Results from Grumpy’s synthetic Fibonacci benchmark demonstrate some of this potential:
Informationen zur globalen Interpreter-Sperre (GIL) finden Sie unter Japanische Wikipedia E3% 83% 90% E3% 83% AB% E3% 82% A4% E3% 83% B3% E3% 82% BF% E3% 83% 97% E3% 83% AA% E3% 82% BF% E3% 83% AD% E3% 83% 83% E3% 82% AF) ist ebenfalls leicht zu verstehen. Die Kombination von Python und nicht threadsicherem C-Code bedeutet, dass das Sperren pro Prozess die Skalierbarkeit einschränkt. Die im ursprünglichen Blog veröffentlichten Benchmark-Ergebnisse lauten wie folgt.
Grumpy ist für einzelne Threads langsamer, aber Sie können sehen, dass die Verarbeitungsleistung für mehrere Threads linear skaliert. Dieses Ergebnis ist jedoch auf die Einstellung der Unterstützung für Python- und C-Erweiterungsmodule zurückzuführen.
(Original-Blog) Zuerst haben wir beschlossen, auf die Unterstützung für C-Erweiterungsmodule zu verzichten. Dies bedeutet, dass Grumpy die Fülle der vorhandenen Python C-Erweiterungen nicht nutzen kann, aber es gab uns viel Flexibilität beim Entwerfen einer API- und Objektdarstellung, die für parallele Workloads skalierbar ist ..
Ich fand die folgende Beschreibung ziemlich irreführend, also lasst uns die tatsächliche Situation überprüfen.
Beschreibung in << Very Scale >>: Go wurde ursprünglich mit dem Ziel entwickelt, eine hohe Leistung bei der Parallelverarbeitung zu erzielen, und ist gut in der Parallelverarbeitung. Es scheint, dass Grumpy im Hinblick auf die Kompatibilität noch Entwicklungszeit benötigt, aber Grumpy, das eine hohe Leistung in Multi-Core / Prozessor demonstriert, kann in Zukunft als äußerst wichtige Python-Ausführungsumgebung verwendet werden.
Ehemaliger Blog =>
Second, Grumpy is not an interpreter. Grumpy programs are compiled and linked just like any other Go program. ... the biggest advantage is that interoperability with Go code becomes very powerful and straightforward: Grumpy programs can import Go packages just like Python modules! (Ich sage): Mürrische Programme, die aus Python generiert wurden, werden wie jedes andere Go-Programm kompiliert und verknüpft ... Der größte Vorteil davon ist die Interoperabilität mit Go. Mürrische Programme können Go-Pakete genau wie Python-Module importieren.
Grumpy hatte wahrscheinlich nicht vor, vorhandenen Python-Code auf Go auszuführen, als er aufgab, C-Code aufzurufen. Ich denke, dass die zukünftige Entwicklung um Grumpy nicht darauf abzielen wird, vorhandene Python-Frameworks wie Django auszuführen, sondern darauf, die Kombination von Go-Bibliotheken und Python-Code zu vereinfachen.
Ich wollte wissen, welchen Code Grumpy ausspuckt, also habe ich versucht, Grumpy auszuführen. Der ursprüngliche Code sieht so aus.
benchmark1.py
#-*- using:utf-8 -*-
import time
if __name__ == '__main__':
start = time.time()
for i in range(1,50):
print (i, 100.0 / (i * i * i ))
elapsed_time = time.time() - start
print ("------- result ------")
print (elapsed_time * 1000 , "ms")
Die Ausführungszeit in Cpython beträgt ca. 1,3 ms.
$ python benchmark1.py (1, 100.0) (2, 12.5) .. (weggelassen) .. (49, 0.0008499859752314087) ------- result ------ (1.3232231140136719, 'ms')
Stellen Sie Grumpy vor. Für Linux (ubuntu16.04) mit Go, Python und gcc war die Bereitstellung gemäß den Anweisungen der Github-Site einfach.
git clone https://github.com/google/grumpy cd grumpy make export GOPATH=
PWD/build export PYTHONPATH= PWD/build/lib/python2.7/site-packages tools/grumpc benchmark1.py > benchmark1.go go build benchmark1.go
Versuchen Sie, die aus Benchmark1.go erstellte Benchmark1-Binärdatei auszuführen.
$ ./benchmark1 (1, 100) (2, 12.5) .. (weggelassen) .. (49, 0.0008499859752314087) ------- result ------ (5.621671676635742, 'ms')
... wie erwartet dauert es länger als Cpython.
Der von Grumpy generierte Go-Quellcode ist lang, daher werde ich ihn unten einfügen. An diesem Punkt scheint es nicht etwas zu sein, das Menschen lesen sollten. ..
https://gist.github.com/kmry/906a8154a37bb0060d35eee20a3e06ca
Wenn Sie sich für den Python-Code auf Go by mürrisch interessieren, ist es meiner Meinung nach eine gute Idee, sich zuerst den Code auf Github anzusehen. Die mit der Python-Standardbibliothek kompatible Go-Implementierung wurde in gewissem Umfang ebenfalls weiterentwickelt.
Wenn Sie sich beispielsweise das Zeitmodul ansehen, mit dem die Ausführungszeit oben gemessen wurde, https://github.com/google/grumpy/search?q=time
Sie können sehen, dass die Implementierung in die Standardbibliothek von Go eingebunden ist, wie unten gezeigt.
grumpy/lib/time.py
"""Time access and conversions."""
from __go__.time import Now, Second, Sleep # pylint: disable=g-multiple-import
def sleep(secs):
Sleep(secs * Second)
def time():
return float(Now().UnixNano()) / Second
Wenn eine "Wow-Person" als Erweiterung dieser Bemühungen angezeigt wird, wird möglicherweise ein WAF-kompatibles Framework für Python auf Grumpys angezeigt. #Ungarantiert :)
Nachdem ein wenig mehr Informationen verfügbar sind, kann es Spaß machen, Parallelverarbeitung mit der go-Bibliothek in Python zu schreiben.
Recommended Posts