2016-12-02 23 views

回答

1

「find」創建一個PyMongo光標,不再做任何工作。 「find」不會向MongoDB服務器發送消息,也不會檢索任何結果。這項工作沒有開始,除非你迭代光標這樣的:

for doc in cursor: 
    print(doc) 

或者:

all_docs = list(cursor) 

所以你在做它的方式就是錯:你要推遲一個線程的工作創建一個光標,不是需要延期,因爲它不做網絡I/O。但是你在主線程上使用光標,而你需要推遲。

所以我建議是這樣的:

def find_all(): 
    # find_one() actually does network I/O 
    doc1 = self.mongo_pool.database[collection].find_one(self.my_id) 
    # creating a cursor does no I/O 
    cursor = self.mongo_pool.database[collection].find().limit(3) 
    # calling list() on a cursor does network I/O 
    return doc1, list(cursor) 

stuff_deferred = deferToThread(find_all) 
+0

大投入!謝謝。 –