2016-01-24 116 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'只发生在某些查询上,并且总是在很长一段时间后发生,那么查询可能执行的时间太长。需要考虑的另一件事是应用程序服务器中的内存使用情况,如果您有大量数据可能不想将其全部加载到内存中。 –