「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)
大投入!謝謝。 –