Çok basit bir Python HTTP sunucusu oluştururken bazı performans sorunları yaşıyorum. En önemli sorun, sunucunun ve tüm istemcilerin yerel makinede çalıştırıldığı istemciye erişmek için kullandığım müşteriye göre performansın değişmesidir. Örneğin, bir Python komut dosyasından (urllib2.urlopen ('http://localhost/') .read()) verilen bir GET isteğinin tamamlanması, sunucunun yükleme yapılmadığı düşünüldüğünde yavaş görünen, tamamlanması bir saniyeden uzun sürüyor. GET isteğini MSXML2.ServerXMLHTTP kullanarak Excel'den çalıştırmak da yavaş hissediyor. Bununla birlikte, Google Chrome veya RCurl'dan veri istemek, R için curl eklentisi, beklediğim şey olan esasen anlık bir yanıt verir.localhost'ta Yavaş Python HTTP sunucusu
Benim karışıklığa daha fazla eklemek, bilgisayar başında çalışırken bilgisayarımda herhangi bir performans sorunu yaşamadığım (performans sorunları ana bilgisayarımda). Her iki sistem de çalışma bilgisayarı 7 yerine Windows XP çalıştırmasına rağmen Python 2.6'yı çalıştırır.
Aşağıda, herhangi bir get isteği için 'Merhaba dünya'yı döndüren çok basit bir sunucu örneğim var. MyHandler I log_request() ve log_message() işlevlerini geçersiz olduğunu
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("Just received a GET request")
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write('Hello world')
return
def log_request(self, code=None, size=None):
print('Request')
def log_message(self, format, *args):
print('Message')
if __name__ == "__main__":
try:
server = HTTPServer(('localhost', 80), MyHandler)
print('Started http server')
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down server')
server.socket.close()
Not. Bunun nedeni, bu işlevlerden biri tarafından gerçekleştirilen tam etki alanı adı aramasının yavaş sunucu için bir neden olabileceğini okumam. Ne yazık ki onları sadece statik bir mesaj yazdırmak için ayarlamam sorunumu çözmedi.
Ayrıca, myHandler uygulamasında do_GET() rutininin ilk satırı olarak print() ifadesini eklediğime dikkat edin. Yavaşlık, bu mesajın basılmasından önce gerçekleşir, yani sonradan gelen hiçbir şey gecikmeye neden olmaz.
john yapmayan bir sürümü ile benim istek işleyicisi içinde
BaseHTTPRequestHandler.address_string()
geçersiz kılmaktır için çalıştığı bir başka düzeltme göz at Bahşiş için teşekkürler, istek 127.0.0.1 gitmek için hız sorunu çözüldü. FQDN arayışını kontrol etmekle ilgili yararlı olabilecek daha fazla bilgi verebilecek biri varsa. – AbielTamam ... Bu, urllib2.urlopen() ve Excel'in bir şekilde çözmek için sonsuza dek süren "localhost" üzerinde FQDN aramasının bir yolunu yaptığı anlamına gelebilir. Sorulması gereken soru, Chrome'un neden/neden olduğu ve aramanın farklı şekilde nasıl yapılacağıdır?Http: // (soket çağrıları, belki?) 'E erişen diğer Python işlevlerini deneyebilir ve bunun bir Python yorumlayıcısına özgü bir şey mi yoksa özel bir urllib olup olmadığını öğrenebilirsiniz. Tercümana özelse, OS/güvenlik duvarı bir şekilde python.exe ve Excel gibi işlemleri Chrome'dan farklı bir şekilde işleme ve curl olabilir. – user235859