Asenkron motorla birlikte tornado ve mongodb ile oynuyorum. Geri arama ile çalışırken her şey yolunda. Sonra sadece bir işlevde bir istek gerçekleştirmek için motor.Op veya tornado.gen.Task kullanma imkanı keşfetti:Db isteği (başka bir işlevde) başka bir işlevde nasıl taşınır?
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")
Ama bu veritabanını taşımak istediğiniz: Çalışma
Yani bu edilmektedir Başka bir modülde kendi işlevinde istekte bulunabilirsiniz. Sorun şu ki, verimin nasıl çalıştığını gerçekten anlamıyorum (verim hakkında bir sürü soruya rağmen). Yani bu ne denedim, ama işe yaramıyor:
#------ 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")
Ve başka işlevi çağrısı:
#------ 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}}
)
Ben pdb ile araştırabilirsiniz
(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
Herhangi bir yardım takdir , Teşekkürler.