Я написал приложение с флягой. Я нашел это очень медленным, когда я развернул его на удаленном сервере. Итак, я сделал некоторые профилирующие практики. Пожалуйста, взгляните на фотографии ниже:
Код, который я использую для профилирования:
#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
найдено. Weird!
Я тоже делал профилирование в оболочке 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
? Потому что это замедляет мой веб-сайт, который меня грустно опустил.