【问题标题】:Python - How to declare common features to a class so that they consume memory only oncePython - 如何向一个类声明通用特性,以便它们只消耗一次内存
【发布时间】:2021-07-01 07:59:41
【问题描述】:

我有一个 Python 类,我需要在处理时使用一些大小约为 300M 的映射数据。此过程将使用多个 Python 工作者运行。由于数据不会改变,但在处理过程中实现可能会发生变化,我正在寻找某种方法来为使用公共源的每个工作人员保留这些数据。换句话说,我想要一个实现,其中该数据不会为每个其他实例消耗内存,所有工作人员都应该能够使用映射而无需创建/使用相同的另一个副本。 这是我已经尝试过(或已经排除)的实现列表 -

  1. 添加一个@classmethod 并使用该类的 1 个实例运行每个工作人员。
  2. 使用全局变量。
  3. 在 ABC 中使用变量。
  4. 使用 LRU functool。
  5. 使用 Redis。

虽然,我已经尝试了上述实现类别,但我可能错过了以正确的方式使用它们。

谢谢

【问题讨论】:

    标签: python-3.x celery


    【解决方案1】:

    我全心全意地推荐选项 #5 。我使用 Redis 作为代理、结果后端和缓存。反正它就是为这种东西而生的,如果你使用 Redis 集群,你也有高可用性。

    【讨论】:

    • 我当前的实现使用 Redis。但我不确定如何在内存中加载一次数据并让每个工作人员使用相同的数据实例。没有工作人员正在修改数据,因此我想避免这个只读数据的重复性。此外,我不想单独查询每个数据点,因为这将需要超过一百万次查询,而且这样做并不是 IMO 的最佳选择。
    • “超过百万”不算什么,因为这些都是非常简单、常见的“关键”搜索。如果您发现这种方法不理想,请尝试并尝试其他替代方法。亲吻原则。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2020-07-11
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    相关资源
    最近更新 更多