6 python django twisted deferred-execution
我有一个正常的Django网站运行.此外,还有另一个扭曲的过程,它使用Django的ORM监听Jabber存在通知并更新Django DB.
到目前为止,它只是调用相应的Django模型(在正确设置了设置环境之后).但是,这会阻止Twisted应用程序,这不是我想要的.
由于我不熟悉,我不知道,使用延迟以非阻塞方式访问Django DB(通过其ORM)的最佳方法是什么.
如果解析在线消息,我想在Django DB中保存具有jid_str的用户在线/离线(使用Django模型UserProfile).我用这个功能做到了:
Run Code Online (Sandbox Code Playgroud)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)
Run Code Online (Sandbox Code Playgroud)
“我有一个正常的 Django 站点正在运行。”
大概在 Apache 下使用 mod_wsgi 或类似的。
如果您使用 Apache 中嵌入的 mod_wsgi,请注意 Apache 是多线程的,并且您的 Python 线程会合并到 Apache 的线程中。对阻塞的分析可能会变得很棘手。
如果您在守护进程模式下使用 mod_wsgi (您应该如此),那么您的 Django 是一个单独的进程。
为什么不继续这种设计模式并使您的“jabber 侦听器”成为一个单独的进程。
如果您希望此进程在任意多个服务器中运行,则可以从init.rc或启动它cron。
因为它是一个单独的过程,所以不会争夺注意力。您的 Django 进程运行速度很快,并且您的 Jabber 侦听器独立运行。
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |