首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Twisted内部推迟Django DB操作?

如何从Twisted内部推迟Django DB操作?
EN

Stack Overflow用户
提问于 2009-10-29 08:57:02
回答 3查看 1.5K关注 0票数 6

我有一个正常的Django站点在运行。此外,还有另一个扭曲的进程,它侦听Jabber存在通知并使用Django的ORM更新Django DB。

到目前为止,它可以工作,因为我只调用了相应的Django模型(在正确设置了设置环境之后)。然而,这阻止了Twisted应用程序,这不是我想要的。

由于我刚接触到扭曲,我不知道最好的方式是使用延迟以非阻塞的方式访问Django DB (通过它的ORM)。

  1. deferredGenerator?
  2. twisted.enterprise.adbapi?(绕过ORM?)
  3. ???

如果解析了存在消息,我想在Django DB中保存使用jid_str的用户是联机/脱机的(使用Django模型UserProfile)。我就是这样做的:

def django_useravailable(jid_str,user_available):try: userhost = jid.JID(jid_str).userhost() user = user_available user.im_jabber_online = user_available user.save()返回jid_str,user_available除了异常,e:打印e raise jid_str,user_available,e

目前,我引用它的理由如下:

代码语言:javascript
运行
复制
d = threads.deferToThread(django_useravailable, from_attr, user_available)
d.addCallback(self.success)
d.addErrback(self.failure)
EN

回答 3

Stack Overflow用户

发布于 2009-10-29 13:30:23

“我有一个正常的Django站点在运行。”

大概是在Apache下使用mod_wsgi或类似的。

如果您使用的是嵌入在Apache中的mod_wsgi,请注意Apache是多线程的,并且您的Python线程被混合到Apache的线程中。对阻塞的分析可能会让人不舒服。

如果您在守护进程模式下使用mod_wsgi (应该是这样),那么Django是一个单独的进程。

为什么不继续这种设计模式,并使您的"jabber侦听器“成为一个单独的过程。

如果您希望运行多个服务器中的任何一个进程,那么让它从init.rccron启动。

因为这是一个独立的过程,它不会争夺注意力。Django进程运行迅速,Jabber侦听器独立运行。

票数 1
EN

Stack Overflow用户

发布于 2009-11-04 23:42:42

我已经成功地使用了您描述为当前方法的方法。通过读取文档,您会发现扭曲的DB使用隐藏下的线程,因为大多数SQL库都有一个阻塞API。

我有一个扭曲的服务器,它可以从现场的电源监视器中保存数据,它可以通过时不时地启动一个子线程并调用我的Django保存代码来做到这一点。您可以阅读更多关于我的实时数据收集管道的信息(这是一个博客链接)。

您是说您正在启动一个子线程,而该子线程仍处于阻塞状态?

票数 1
EN

Stack Overflow用户

发布于 2009-11-05 21:20:12

我有一个运行的Twisted应用程序,我使用Django ORM。我不会推迟的。我知道这是错误的,但还没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1642392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档