2016-01-24 119 views
0

我是網絡開發新手,我正嘗試使用Flask微框架創建一個RESTful Web服務。燒瓶RESTful API請求,破管[Errno 32]!

這裏是我的代碼:

app = Flask(__name__)  

client = MongoClient() 
db = client.markets 

def toJson(data): 
    return json.dumps(data, default=json_util.default) 

@app.route('/', methods=['GET']) 

def get_tasks(): 
    cursor = db.europe.find() 
    list = [] 

    for i in cursor: 
     list.append(i) 

    return toJson(list) 

當我送從我的瀏覽器的請求,更是不斷等待服務器返回什麼。

最終我會看到在終端上運行的燒瓶服務器會給我:[Errno 32]破損的管道。

我的收藏有150萬條目,每條有20個屬性。這是否是因爲請求太大?

在此先感謝。

回答

0

Broken pipe表示您燒瓶過程想與之對話的socketpipe的另一端已經死亡。考慮到您正在與數據庫交互,數據庫很可能已終止連接,或者連接因其他原因而死亡。

也許你應該分析你在db上運行的查詢,因爲代碼本身似乎沒有明顯的問題。

嘗試在您的MongoDB上手動運行查詢,看看會發生什麼。查詢是否成功返回?

你提到在獲得該錯誤之前需要花費很多時間。難道是你的模式中缺少或沒有正確使用某些索引,這會使查詢執行非常緩慢,並且在等待很長時間後,它會達到超時(f.e. maxTimeMS)?

+0

感謝您的迴應。 我有一些關鍵屬性的索引,當進行一些特定的查詢時,數據返回到瀏覽器。 但是如果我想返回所有條目,如代碼中那樣? 在這裏,我得到了破管。在這種情況下,我是否應該單獨提出請求,因爲查詢太大? – noob

+0

是的,如果'Broken Pipe'只發生在某些查詢上,並且總是在很長一段時間後發生,那麼查詢可能執行的時間太長。需要考慮的另一件事是應用程序服務器中的內存使用情況,如果您有大量數據可能不想將其全部加載到內存中。 –