[PYTHON] Flask + PyPy Mit Blueprint habe ich einen Geschwindigkeits-Benchmark für das große Web erstellt

Ich habe Django, Flask und Pyramid in Vorheriger Artikel verglichen und fand Flask gut, also habe ich es sofort versucht.

Wir vergleichen und vergleichen die Funktionen, die gemäß dem Blueprint Tutorial erstellt wurden, das im Python-Webframework Flask als umfangreich gilt. Blueprint ist eine Flask-Funktion, die Ansichten in mehrere kleine Apps (jede Funktion) unterteilt.

Nach dem Erstellen habe ich Apache Bench verwendet, um einen ** Benchmark ** zu erhalten, der PyPy3 2.4 und Python 3.5 vergleicht.

Verzeichnisaufbau

Im Gegensatz zur Standard-Einzelansicht wird ein Ansichtsverzeichnis eingerichtet, und Ansichten für jede Funktion werden in diesem Verzeichnis eingerichtet. Dieses Mal habe ich die Funktionen root und report hinzugefügt.

■ Verzeichnisstruktur スクリーンショット 2015-12-11 16.36.56.png

Vorlagenabstraktion

Trennen Sie allgemeine Teile wie HTML HEAD- und BODY-Tags, indem Sie sie von "master.html" trennen.

master.html


<!DOCTYPE html>
<html lang='en'>
<head>
  <meta charset="utf-8" />
  <title>{% block title %}{% endblock %} - Hello Flask!</title>
  <link type="text/css" rel="stylesheet"
       href="{{ url_for('static',
                        filename='hello.css')}}" />
</head>
<body>

{% block body %}{% endblock %}

</body>
</html>

index.html


{% extends "master.html" %}

{% block title %}index{% endblock %}

{% block body %}
<h1>this is index page</h1><br />

<h3>report</h3>
<a href="{{ url_for('report.index') }}">report - index</a><br />
<a href="{{ url_for('report.report_list') }}">report - list</a><br />
{% endblock %}

■ Darstellungsergebnis von index.html スクリーンショット 2015-12-11 16.41.33.png

URL-Abstraktion und Definition der obersten Seite

Der Flask-Server wird mit dem Befehl python main.py gestartet. Verknüpfen Sie die URL für jede Funktion mit main.py.

main.py


# -*- coding: utf-8 -*-
from flask import Flask
from views import root, report


app = Flask(__name__)
#Definieren Sie die URL für jede Funktion
app.register_blueprint(root.app, url_prefix="/")
app.register_blueprint(report.app, url_prefix="/report")


if __name__ == '__main__':
    app.run(debug=True)

Definition der Wurzelfunktion

Definieren Sie die Site-Top-Seite.

root.py


# -*- coding: utf-8 -*-
from flask import render_template, Blueprint

#Der Name des ersten Arguments ist die Vorlagen-URL_Mit dem Namen verknüpft, wenn Sie anrufen
app = Blueprint("index",
                __name__,
                url_prefix='/<user_url_slug>')

#URL beim Aufrufen einer Vorlage_for('index.index')
@app.route("/")
def index():
    return render_template('root/index.html')

Definition der Berichtsfunktion

report.py


# -*- coding: utf-8 -*-
from flask import Module, render_template, Blueprint

app = Blueprint('report',
                __name__,
                url_prefix='/<user_url_slug>')


#URL beim Aufrufen einer Vorlage_for('report.index')
@app.route('/', methods=['GET'], strict_slashes=False)
def index():
    return 'report index'


#URL beim Aufrufen einer Vorlage_for('report.report_list')
@app.route('/report_list', methods=['GET'], strict_slashes=False)
def report_list():
    return 'report - list'

Benchen mit PyPy3 2.4 und Python 3.5

Ich habe debug = False gesetzt und versucht, 10.000 Mal mit 100 Parallelität mit dem Befehl Apache Bench anzufordern. Python 3.5 lief 26% schneller. Da der Server mit dem Befehl python main.py gestartet wurde, handelt es sich um einen einzelnen Prozessbenchmark. Ich hatte erwartet, dass PyPy mit einer überwältigenden Geschwindigkeit zuschlagen würde, aber als ich den Deckel öffnete, kam ich zu dem mysteriösen Ergebnis, dass Python 3.5 schneller war. Kolben ist "Kolben == 0,10,1". Als nächstes möchte ich mit DB-Zugriff untersuchen.

スクリーンショット 2015-12-11 17.20.24.png

PyPy3 Bank Ergebnisse


>>>ab -n 10000 -c 100 http://localhost:5000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Werkzeug/0.11.2
Server Hostname:        localhost
Server Port:            5000

Document Path:          /
Document Length:        398 bytes

Concurrency Level:      100
Time taken for tests:   20.783 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      5530000 bytes
HTML transferred:       3980000 bytes
Requests per second:    481.16 [#/sec](mean)
Time per request:       207.829 [ms](mean)
Time per request:       2.078 [ms](mean, across all concurrent requests)
Transfer rate:          259.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   2.6      1      74
Processing:     3  205  53.6    199     762
Waiting:        3  205  53.1    199     760
Total:         24  206  53.0    199     763

Percentage of the requests served within a certain time (ms)
  50%    199
  66%    204
  75%    211
  80%    214
  90%    225
  95%    236
  98%    295
  99%    571
 100%    763 (longest request)

++++++++++++++++++++++++++
>>> python --version
Python 3.2.5 (b2091e973da6, Oct 19 2014, 18:30:58)
[PyPy 2.4.0 with GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)]

Python3.5 Bankergebnisse


>>>ab -n 10000 -c 100 http://localhost:5000/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Werkzeug/0.11.2
Server Hostname:        localhost
Server Port:            5000

Document Path:          /
Document Length:        398 bytes

Concurrency Level:      100
Time taken for tests:   16.380 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      5530000 bytes
HTML transferred:       3980000 bytes
Requests per second:    610.52 [#/sec](mean)
Time per request:       163.795 [ms](mean)
Time per request:       1.638 [ms](mean, across all concurrent requests)
Transfer rate:          329.70 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   5.8      0     195
Processing:     3  161  44.7    148     475
Waiting:        3  161  44.5    148     475
Total:         59  162  43.9    148     476

Percentage of the requests served within a certain time (ms)
  50%    148
  66%    151
  75%    154
  80%    156
  90%    239
  95%    276
  98%    299
  99%    322
 100%    476 (longest request)

++++++++++++++++++++++++++4
>>> python --version
Python 3.5.0

Wenn der Parallelitätsgrad 1 ist, beträgt die Antwortgeschwindigkeit 1,8 bis 2,5 ms. Bisher ist Flask sehr schnell (・ ㅂ ・) و

Recommended Posts

Flask + PyPy Mit Blueprint habe ich einen Geschwindigkeits-Benchmark für das große Web erstellt
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 2 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 3 erstellen
Lassen Sie uns eine WEB-Anwendung für das Telefonbuch mit Flasche Teil 4 erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Ich habe einen Benchmark für die h5py-Komprimierung erstellt
Erstellen Sie einen Webdienst mit Docker + Flask
Ich habe eine WEB-Bewerbung bei Django gemacht
[GCP] Verfahren zum Erstellen einer Webanwendung mit Cloud-Funktionen (Python + Flask)
Starten Sie einen Webserver mit Python und Flask
Mattermost Bot mit Python gemacht (+ Flask)
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Ich möchte mit einem Knopf am Kolben übergehen
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich habe einen einfachen RPA für die Anmeldung mit Selen ausprobiert
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
(Fehler) Stellen Sie eine mit Flask mit Heroku erstellte Web-App bereit
Ich habe einen Ressourcenmonitor für Raspberry Pi mit einer Tabelle erstellt
Erstellen Sie mit Falcon einen Light-Speed-Web-API-Server
(Für Anfänger) Versuchen Sie, mit Django eine einfache Web-API zu erstellen
Entwicklung von Webanwendungen mit Flask
Webanwendung mit Python + Flask ② ③
Webanwendung mit Python + Flask ④
Erstellen Sie mit Chalice eine flaschen- / flaschenähnliche Webanwendung auf AWS Lambda
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich suchte mit Deep Learning nach einer ähnlichen Karte von Hearthstone
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich habe eine Entwicklungsumgebung für Django 3.0 mit Docker, Docker-Compose und Poetry erstellt
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen