【问题标题】:How to make a singleton class with Python Flup fastcgi server?如何使用 Python Flup fastcgi 服务器制作单例类?
【发布时间】:2009-03-16 13:55:46
【问题描述】:

我使用 Flup 作为 Django 的 fastcgi 服务器。

请向我解释如何使用单例? 我不确定我是否理解 Flup 的线程模型。

【问题讨论】:

  • 你用的是什么配置?你的 fastcgi 服务器是线程化的还是分叉的?
  • 现在我在模块上下文中使用线程 fastcgi 和单个对象,但我不确定它是否正确。我认为它不适用于分叉服务器。你知道这类问题更常见的pythonic解决方案吗?
  • 我建议不要在这种情况下使用单变量。无论 HTTP 服务器的线程模型如何,应用程序都应该工作——它们应该是解耦的。你能解释一下你需要一个单例吗?

标签: python django flup


【解决方案1】:

如果您使用分叉服务器,您将根本无法拥有单例(至少没有比您的实际上下文寿命更长的单例)。

使用线程服务器,应该是可能的(但我不太喜欢 Django 和 Web 服务器!)。

您是否尝试过这样的代码(作为附加模块):

# Singleton module
_my_singleton = None

def getSingleton():
   if _my_singleton == None:
      _my_singleton = ...
   return _my_singleton

当然,在树点(“...”)处,您必须添加编码来创建单例对象。

这还不是生产性代码,但您可以使用它来检查单例是否完全适用于您的框架。因为只有手头有某种“全局存储”才能实现单例。分叉的服务器使这变得更加困难。

如果“正常全局存储”不起作用,则有另一种可能性。您可以使用 Python 的序列化工具将单例存储在文件系统上。但是,当然,这实际上会增加更多开销!

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2017-06-14
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多