通常の Django サイトを実行しています。さらに、Jabber プレゼンス通知をリッスンし、Django の ORM を使用して Django DB を更新する別のねじれたプロセスがあります。
これまでのところ、対応する Django モデルを呼び出すだけで機能します (設定環境を正しくセットアップした後)。ただし、これは Twisted アプリをブロックします。これは私が望んでいるものではありません。
私はツイストに慣れていないので、遅延を使用してノンブロッキングの方法で(ORMを介して)Django DBにアクセスする最善の方法は何でしょうか。
- deferredGenerator ?
- twisted.enterprise.adbapi ? (ORMを回避しますか?)
- ???
プレゼンス メッセージが解析される場合、jid_str を持つユーザーがオンライン/オフラインであることを Django DB に保存します (Django モデルを使用UserProfile
)。私はその機能でそれを行います:
def django_useravailable(jid_str, user_available): try: userhost = jid.JID(jid_str).userhost() user = UserProfile.objects.get(im_jabber_name=userhost) user.im_jabber_online = user_available user.save() return jid_str, user_available except Exception, e: print e raise jid_str, user_available,e
現在、私はそれを呼び出す:
d = threads.deferToThread(django_useravailable, from_attr, user_available)
d.addCallback(self.success)
d.addErrback(self.failure)