【问题标题】:Limit Python VM memory限制 Python VM 内存
【发布时间】:2009-11-19 00:05:15
【问题描述】:

我正试图找到一种方法来限制 Python VM 的可用内存,就像 Java VM 中的选项“-Xmx”一样。 (想法是能够玩MemoryError异常)

我不确定此选项是否存在,但可能存在使用操作系统命令“隔离”进程及其内存的解决方案。

谢谢。

【问题讨论】:

    标签: python memory jvm


    【解决方案1】:

    在 Linux 上,我使用的是 resource 模块:

    import resource
    resource.setrlimit(resource.RLIMIT_AS, (megs * 1048576L, -1L))
    

    【讨论】:

      【解决方案2】:

      在 *nix 上,您可以使用 ulimit 命令,特别是 -m(最大内存大小)和 -v(虚拟内存)。

      【讨论】:

      • 谢谢!正是我需要的。
      【解决方案3】:

      不要在这上面浪费任何时间。

      相反,如果您想使用MemoryError 异常,请创建一个隔离对象构造的设计,以便您可以对其进行测试。

      不是这个

      for i in range(1000000000000000000000):
          try:
              y = AnotherClass()
          except MemoryError:
              # the thing we wanted to test
      

      考虑一下。

      for i in range(1000000000000000000000):
          try:
              y = makeAnotherClass()
          except MemoryError:
              # the thing we wanted to test
      

      这需要在您的设计中添加一点点。

      class AnotherClass( object ):
          def __init__( self, *args, **kw ):
          blah blah blah
      
      def makeAnotherClass( *args, **kw ):
          return AnotherClass( *args, **kw )
      

      额外的功能——从长远来看——被证明是一个很好的设计模式。这是一个工厂,您经常需要类似的东西。

      然后你可以用类似这样的东西替换这个makeAnotherClass

      class Maker( object ):
          def __init__( self, count= 12 ):
              self.count= count
          def __call__( self, *args, **kw ):
              if self.count == 0:
                  raise MemoryError
              self.count -= 1
              return AnotherClass( *args, **kw )
       makeAnotherClass= Maker( count=12 )
      

      此版本将引发异常,而您不必以任何晦涩、不支持、复杂或神奇的方式限制内存。

      【讨论】:

      • 嗯,有趣的答案 :) 绝对比第一个更复杂,并且在我的代码中具有侵入性。哦,谢谢你教我们什么是工厂设计模式。
      • 在上面的示例中,您可能希望使用 xrange 而不是 range(假设这不是 Python 3),否则您可能会因为错误的原因耗尽内存。
      • @tweksteen:如果你认为它是“侵入性的”,那么你还没有完成正确的测试驱动设计。此外,如果您不使用工厂,则不允许扩展类层次结构。你应该 - 认真 - 重新考虑你的设计,以便使用工厂。
      • @Ned Deily:我对这个看起来很傻的数字不认真的可能性有多大?
      • @S.Lott:大约 10000000000000000000000 分之一??
      猜你喜欢
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 2011-09-22
      • 2023-04-05
      • 1970-01-01
      • 2010-09-26
      相关资源
      最近更新 更多