フラスコアプリケーションを書きました。リモートサーバーにデプロイしたとき、非常に遅いことがわかりました。それで、私はそれを使っていくつかのプロファイリングの練習をしました。以下の写真をご覧ください。
プロファイリングに使用するコードは次のとおりです。
#coding: utf-8
from werkzeug.contrib.profiler import ProfilerMiddleware
from app import app
app.config['PROFILE'] = True
app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions = [30])
app.run(debug = True)
写真1
リモート サーバーでのプロファイリング。多分ボトルネックは_socket.getaddrinfo
写真2
ローカル マシンでのプロファイリング。ボトルネックは見つかりませんでした。
写真3
場合によっては、リモートサーバーでもボトルネックが見つからないことがあります。見つかりません_socket.getaddrinfo
。変!
リモートサーバーのpythonシェルでもプロファイリングを行いましたcProfile
. これを見てください:
In [10]: cProfile.run("socket.getaddrinfo('easylib.gdufslib.org', 80, 0, 0, socket.SOL_TCP)")
3 function calls in 8.014 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 8.014 8.014 :1()
1 8.014 8.014 8.014 8.014 {_socket.getaddrinfo}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
In [11]: cProfile.run("socket.getaddrinfo('easylib.gdufslib.org', 80, 0, 0, socket.SOL_TCP)")
3 function calls in 8.009 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 8.009 8.009 :1()
1 8.009 8.009 8.009 8.009 {_socket.getaddrinfo}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
たぶん、仕事をするのに時間がかかるという事実があり、それをdns resolve
自分で変えることはできません。
誰でも教えてもらえますか: なぜ_socket.getaddrinfo
呼び出され、なぜ呼び出されないことがありますか? 呼ばれないようにする方法_socket.getaddrinfo
は?それは悲しいことに私を失望させた私のウェブサイトを遅くするからです.