5
私は、非同期ドライバモーターを使って、竜巻とmongodbで遊んでいます。 コールバックを操作するときは、問題ありません。他の関数で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")
しかし、私は、このデータベースを移動したいと思います。だから、これが働いている
:その後、私は1つの関数に要求を実行するためにmotor.Opまたはtornado.gen.Taskを使用する可能性を発見しました別のモジュールで独自の機能で要求します。問題は、私が実際に歩留まりがどのように働いているのか理解していないことです(私が歩留まりに関する多くの質問を読んだにもかかわらず)。 これは、私が試したものですが、それは働いていない:
#------ 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
感謝すべてのヘルプ、ありがとう。