У меня работает нормальный сайт Django. Кроме того, есть еще один витой процесс, который прослушивает уведомления о присутствии Jabber и обновляет базу данных Django с помощью ORM Django.
Пока все работает, я просто называю соответствующие модели Django (после правильной настройки среды настроек). Это, однако, блокирует приложение Twisted, а это не то, что мне нужно.
Поскольку я новичок в твисте, я не знаю, как лучше всего получить доступ к БД Django (через ORM) неблокирующим способом, используя deferreds.
- deferredGenerator?
- twisted.enterprise.adbapi? (обойти ОРМ?)
- ???
Если сообщение о присутствии анализируется, я хочу сохранить в базе данных Django, что пользователь с jid_str находится в режиме онлайн / офлайн (используя модель 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)