J'ai comparé Django, Flask et Pyramid dans Article précédent, et j'ai trouvé Flask bon, donc je l'ai essayé immédiatement.
Nous évaluons et comparons les fonctionnalités construites selon le Blueprint Tutorial, qui est censé être à grande échelle dans le framework Web Python appelé Flask. Blueprint est une fonction Flask qui sépare les vues en plusieurs petites applications (chaque fonction).
Après la construction, j'ai utilisé Apache Bench pour obtenir un ** benchmark ** comparant PyPy3 2.4 et Python 3.5.
Contrairement à la vue unique par défaut, un répertoire de vues est configuré et les vues pour chaque fonction sont configurées dans ce répertoire. Cette fois, j'ai ajouté les fonctions root
et report
.
■ Structure du répertoire
Séparez les parties communes telles que les balises HTML HEAD et BODY en les séparant de master.html
.
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 %}
■ Résultat de la représentation de index.html
Le serveur Flask est démarré avec la commande python main.py
. Associez l'URL de chaque fonction à main.py.
main.py
# -*- coding: utf-8 -*-
from flask import Flask
from views import root, report
app = Flask(__name__)
#Définir l'URL pour chaque fonction
app.register_blueprint(root.app, url_prefix="/")
app.register_blueprint(report.app, url_prefix="/report")
if __name__ == '__main__':
app.run(debug=True)
Définissez la première page du site.
root.py
# -*- coding: utf-8 -*-
from flask import render_template, Blueprint
#Le nom du premier argument est l'url du modèle_Lié au nom lors de l'appel pour
app = Blueprint("index",
__name__,
url_prefix='/<user_url_slug>')
#Url lors de l'appel d'un modèle_for('index.index')
@app.route("/")
def index():
return render_template('root/index.html')
report.py
# -*- coding: utf-8 -*-
from flask import Module, render_template, Blueprint
app = Blueprint('report',
__name__,
url_prefix='/<user_url_slug>')
#Url lors de l'appel d'un modèle_for('report.index')
@app.route('/', methods=['GET'], strict_slashes=False)
def index():
return 'report index'
#Url lors de l'appel d'un modèle_for('report.report_list')
@app.route('/report_list', methods=['GET'], strict_slashes=False)
def report_list():
return 'report - list'
J'ai défini debug = False et j'ai essayé de demander 10000 fois avec 100 parallélisme avec la commande Apache Bench. Python 3.5 a été 26% plus rapide. Le serveur a été démarré par la commande python main.py
, il s'agit donc d'un benchmark de processus unique. Je m'attendais à ce que PyPy soit extrêmement rapide, mais lorsque j'ai ouvert le couvercle, je me suis retrouvé avec un résultat mystérieux que Python 3.5 était plus rapide. flask est «Flask == 0.10.1». Ensuite, je voudrais enquêter sur l'accès à la base de données.
Résultats du banc PyPy3
>>>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 résultats de bancs
>>>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
Si le degré de parallélisme est 1, la vitesse de réponse est de 1,8 à 2,5 ms. Jusqu'à présent, Flask est très rapide (・ ㅂ ・) و
Recommended Posts