5
我正在玩龍捲風和mongodb,與異步驅動電機。 使用回調處理一切都很好。後來我發現使用motor.Op或tornado.gen.Task僅在一個函數執行請求的可能性:如何在其他函數中移動db請求(使用yield)?
所以這是工作:
class Contact_handler(Main_handler):
@web.asynchronous
@gen.coroutine
def get(self, other_id):
event = events.Event_send_contact_request(self.user_id)
result = yield motor.Op(db.users.update,
{'_id': ObjectId(other_id)},
{'$push': {'evts': event.data}}
)
self.finish("ok")
但我想提出這個數據庫在另一個模塊中請求自己的功能。問題是,我不明白這裏的收益率是如何工作的(儘管我讀了很多關於收益率的問題)。 所以這是我試過,但它不工作:
#------ file views.py -------------
class Contact_handler(Main_handler):
def get(self, other_id):
event = events.Event_send_contact_request(self.user_id)
result = model.push_event_to_user(other_id, event)
self.finish("ok")
而在另一個函數調用:
#------ file model.py -------------
@gen.coroutine
def push_event_to_user(user_id, event):
## Ajout de la demande dans les events du demandé:
yield motor.Op(db.users.update,
{'_id': ObjectId(user_id)},
{'$push': {'evts': event}}
)
如果我調查與PDB:
(Pdb) l
157 event = events.Event_send_contact_request(self.user_id)
158 result = model.push_event_to_user(other_id, event)
159
160 import pdb; pdb.set_trace()
161
162 -> self.finish("ok")
163
(Pdb) result
<tornado.concurrent.TracebackFuture object at 0xa334b8c>
(Pdb) result.result()
*** Exception: DummyFuture does not support blocking for results
任何幫助表示讚賞, 謝謝。