2016-12-02 5 views
0

Согласно документации на скрученный deferToThread (http://twistedmatrix.com/documents/current/api/twisted.internet.threads.deferToThread.html), я могу дать ему одну функцию, и это аргументы.Как использовать несколько функций в twisted deferToThread?

Я хочу ограничить вывод документов, которые я найду (скажем, 3 документам), поэтому я также хочу использовать функцию ограничения из драйвера MongoDB (pymongo).

ответ

1

«find» создает PyMongo Cursor и больше не работает. «find» не отправляет сообщение на сервер MongoDB и не получает никаких результатов. Работа не начинается, если не перебирать курсор так:

for doc in cursor: 
    print(doc) 

Или:

all_docs = list(cursor) 

Так как вы делаете это уже не так: вы откладывая в теме работа создания курсора, который делает не, необходимо отложить, поскольку он не выполняет сетевой ввод-вывод. Но вы затем используете курсор на основной поток, который вам нужно отложить. do.

Так я предлагаю что-то вроде:

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

большой вклад! Благодарю. –

Смежные вопросы