पर धीमी पायथन HTTP सर्वर एक बहुत ही सरल पायथन HTTP सर्वर बनाते समय मुझे कुछ प्रदर्शन समस्याओं का सामना करना पड़ रहा है। मुख्य मुद्दा यह है कि प्रदर्शन इस बात पर निर्भर करता है कि मैं किस क्लाइंट का उपयोग करने के लिए उपयोग करता हूं, जहां सर्वर और सभी क्लाइंट स्थानीय मशीन पर चल रहे हैं। उदाहरण के लिए, एक पायथन स्क्रिप्ट (urllib2.urlopen ('http://localhost/') से जारी एक GET अनुरोध .read()) को पूरा करने के लिए केवल एक सेकंड से अधिक समय लगता है, जो धीमा लगता है कि सर्वर लोड नहीं है। MSXML2.ServerXMLHTTP का उपयोग कर Excel से GET अनुरोध चलाना भी धीमा लगता है। हालांकि, Google क्रोम या आरसीआरएल से डेटा का अनुरोध करते हुए, आर के लिए कर्ल ऐड-इन, अनिवार्य रूप से तत्काल प्रतिक्रिया उत्पन्न करता है, जो मैं अपेक्षा करता हूं।स्थानीयहोस्ट
मेरे भ्रम में आगे बढ़ना यह है कि जब मैं अपने कंप्यूटर पर काम पर हूं (प्रदर्शन समस्याएं मेरे घर कंप्यूटर पर हैं) तो मुझे किसी भी क्लाइंट के लिए किसी भी प्रदर्शन की समस्या का अनुभव नहीं होता है। दोनों सिस्टम पायथन 2.6 चलाते हैं, हालांकि कार्य कंप्यूटर 7 के बजाय विंडोज एक्सपी चलाता है।
नीचे मेरा बहुत ही सरल सर्वर उदाहरण है, जो किसी भी अनुरोध के लिए 'हैलो वर्ल्ड' देता है।
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()
ध्यान दें कि MyHandler में मैं log_request() और log_message() फ़ंक्शन ओवरराइड। कारण यह है कि मैंने पढ़ा है कि इन कार्यों में से किसी एक द्वारा निष्पादित एक पूर्ण-योग्य डोमेन नाम लुकअप धीमा सर्वर का कारण हो सकता है। दुर्भाग्यवश उन्हें एक स्थिर संदेश मुद्रित करने के लिए सेट करने से मेरी समस्या हल नहीं हुई।
इसके अलावा, ध्यान दें कि मैंने MyHandler में do_GET() दिनचर्या की पहली पंक्ति के रूप में एक प्रिंट() कथन दिया है। इस संदेश को मुद्रित करने से पहले धीमापन होता है, जिसका अर्थ यह है कि इसके बाद आने वाली कोई भी चीज़ देरी नहीं कर रही है।
जॉन प्रदर्शन नहीं करता साथ मेरे अनुरोध हैंडलर में
BaseHTTPRequestHandler.address_string()
ओवरराइड करने के लिए है पर एक नज़र डालें - टिप के लिए धन्यवाद, अनुरोध 127.0.0.1 पर जाने के लिए गति मुद्दे हल किया। अगर कोई मुझे एफक्यूडीएन लुकअप को नियंत्रित करने के बारे में अधिक जानकारी दे सकता है जो उपयोगी होगा। – Abielठीक है ... इसका मतलब यह हो सकता है कि urllib2.urlopen() और Excel "localhost" पर FQDN लुकअप का एक तरीका कर रहे हैं जो किसी भी तरह हल करने के लिए हमेशा के लिए ले रहा है। पूछने का सवाल यह है कि क्रोम और कर्ल लुकअप को अलग तरीके से क्यों कर रहे हैं?आप अन्य पायथन कार्यों को आजमा सकते हैं जो http: // (सॉकेट कॉल, शायद?) तक पहुंच सकते हैं और देख सकते हैं कि यह एक पायथन दुभाषिया विशिष्ट चीज़ या urllib विशिष्ट है या नहीं। यदि दुभाषिया विशिष्ट है, तो ओएस/फ़ायरवॉल किसी भी तरह से क्रोम और कर्ल से अलग python.exe और एक्सेल जैसे प्रक्रियाओं का इलाज कर सकता है। – user235859