【问题标题】:Python, Django and event loop (periodic jobs)Python、Django 和事件循环(定期作业)
【发布时间】:2012-02-15 13:12:37
【问题描述】:

我正在为在 Debian Linux 下使用 Django + WSGI + Apache 的服务器开发 Python 应用程序。该应用程序具有Web界面以及 命令行界面(仍然使用 django 模型...,只是不使用视图和模板)。
数据库后端是 SQLite3。

此应用程序还需要定期运行一些作业。我编写了一个使用 python-gobject 和 python-glib 的类 unix 守护进程,并像这样运行这些作业:

gobject.timeout_add_seconds(seconds, someCallback...)
gobject.timeout_add_seconds(seconds, someCallback...)
...
gobject.timeout_add_seconds(seconds, someCallback...)

glib.MainLoop().run()

我测试了一下,sqlite db写入数据有一些奇怪的问题。我认为这是因为有两个 Python 实例从/向单个 sqlite db 读取和写入。一个用于 apache+wsgi,一个用于我自己的守护进程。 (或事件 3 Python 实例,当我使用命令行界面时)

我的问题是,建议我做什么?将那些 timeout_add 和 MainLoop 放在我的“dj_survey.wsgi”中以在 apache 启动时运行?

【问题讨论】:

  • 芹菜不适合你吗? periodic tasks 功能似乎非常适合您的需求。
  • 是的,我正在阅读它。不过这个话题让我有点怀疑stackoverflow.com/questions/8404325/…
  • 因为我不需要太多的功能!只是一些简约和稳定的东西。
  • 我换个问题:我可以在wsgi环境中运行jsonrpc服务器吗?
  • 我看到了wsgi-jsonrpc,但是我怕django不允许我有两个wsgi应用!

标签: python django pygobject


【解决方案1】:

不,您不想在 apache/任何 WSGI 环境中运行后台进程。

在 shell 上启动它们并使用某种方法与您的后台进程进行通信。

【讨论】:

  • 谢谢,我应该用什么方法来沟通? (我想不使用 D-BUS 作为服务器!)
  • 我应该从 localhost 向 apache/django 发送来自该守护进程的 http 请求吗? (因为apache和django只响应这些请求)
  • 或者我最好不要使用 WSGI。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多