Ho un normale sito Django in esecuzione. Inoltre, c'è un altro processo contorto, che ascolta le notifiche di presenza di Jabber e aggiorna il Django DB usando l'ORM di Django.Come rinviare un'operazione di Django DB da Twisted?
Finora funziona come chiamo i corrispondenti modelli Django (dopo aver configurato correttamente l'ambiente delle impostazioni). Questo, tuttavia, blocca l'app Twisted, che non è quello che voglio.
Dato che sono nuovo di Twisted non so, quale sarebbe il modo migliore per accedere al Django DB (tramite il suo ORM) in modo non bloccante utilizzando i differiti.
- deferredGenerator?
- twisted.enterprise.adbapi? (aggirare l'ORM?)
- ???
Se il messaggio di presenza viene analizzato voglio salvare in Django DB che l'utente con jid_str è online/offline (utilizzando il modello di Django UserProfile
). Lo faccio con quella funzione:
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
Attualmente, invoco con: "Ho un normale sito Django esecuzione"
d = threads.deferToThread(django_useravailable, from_attr, user_available)
d.addCallback(self.success)
d.addErrback(self.failure)
Inserisci il codice, in particolare la parte che "blocca" la tua app. – ohnoes