2013-04-01 27 views
5

我使用的奶瓶框架實現WSGI請求和響應,因爲單個線程的問題,我改變了服務器到PythonWSGIServer與Apache的替補測試,但結果由錯誤破裂的管道,其與此問題類似How to prevent errno 32 broken pipe?。 我已經試過答案,但無濟於事。Python的粘貼使用奶瓶框架水管壞了錯誤

Traceback (most recent call last): 
    File "/Library/Python/2.7/site-packages/paste/httpserver.py", line 1068, in process_request_in_thread 
    self.finish_request(request, client_address) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 323, in finish_request 
    self.RequestHandlerClass(request, client_address, self) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 641, in __init__ 
    self.finish() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 694, in finish 
    self.wfile.flush() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 303, in flush 
    self._sock.sendall(view[write_offset:write_offset+buffer_size]) 
error: [Errno 32] Broken pipe 

服務器代碼如下所示,我不知道如何改善連接,使用線程池?

from paste import httpserver 

    @route('/') 
    def index(): 
     connection = pymongo.MongoClient(connectionString) 
     db = connection.test 
     collection = db.test 
     return str(collection.find_one()) 

    application = default_app() 
    httpserver.serve(application, host='127.0.0.1', port=8082) 

回答

3

的問題是由於WSGIServer是同步服務器,它並不適用於高併發用戶發送在同一時間的請求。爲了繞過這些後備,可以使用很多第三方框架。其中最受歡迎的是Gevent greenlet圖書館,Tornado和CherryPy。所有這些都基於事件驅動和異步方法,使他們能夠處理多個併發用戶。