2012-03-27 13 views
0

私はちょうど次のエラーがあり、私はそれをどうしたらいいのか分かりません。誰かが私にこのエラーを説明できますか?

Unhandled exception in thread started by <bound method Timer.__bootstrap of <Timer(Thread-3, stopped -1234564240)>> 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/threading.py", line 525, in __bootstrap 
    self.__bootstrap_inner() 
    File "/usr/lib/python2.7/threading.py", line 565, in __bootstrap_inner 
    (self.name, _format_exc())) 
    File "/usr/lib/python2.7/traceback.py", line 241, in format_exc 
    return ''.join(format_exception(etype, value, tb, limit)) 
    File "/usr/lib/python2.7/traceback.py", line 141, in format_exception 
    list = list + format_tb(tb, limit) 
    File "/usr/lib/python2.7/traceback.py", line 76, in format_tb 
    return format_list(extract_tb(tb, limit)) 
    File "/usr/lib/python2.7/traceback.py", line 101, in extract_tb 
    line = linecache.getline(filename, lineno, f.f_globals) 
    File "/usr/lib/python2.7/linecache.py", line 14, in getline 
    lines = getlines(filename, module_globals) 
    File "/usr/lib/python2.7/linecache.py", line 40, in getlines 
    return updatecache(filename, module_globals) 
    File "/usr/lib/python2.7/linecache.py", line 133, in updatecache 
    lines = fp.readlines() 
MemoryError 

関連するコード(私はそれが実際に該当するかどうか分からないが、 - それは例外で言及した任意の方法である私のコードのほんの一部のみです):

class Timer(threading.Thread): 
    def __init__(self, interval, callback, limit=0, args=[], kwargs={}): 
     threading.Thread.__init__(self) 
     self.interval = interval/1000.0 
     self.callback = callback 
     self.limit = limit 
     self.args = args 
     self.kwargs = kwargs 
     self.iterations = 0 
     self._stop = threading.Event() 

    def restart(self): 
     self.iterations = 0 
     self._stop.clear() 
     threading.Thread.__init__(self) 
     self.start() 

    def run(self): 
     while not self._stop.wait(self.interval): 
      self.callback(*self.args, **self.kwargs) 
      self.iterations += 1 
      if self.limit > 0 and self.iterations >= self.limit: 
       break 

    def stop(self): 
     self._stop.set() 

    def stopped(self): 
     return self._stop.isSet() 

私はそれを考えます私がこのコードを実行していたサーバが一種の崩れていたのはこの頃のことでした。これは単なる症状だったのでしょうか、それとも私のコードのどこかに問題があることを示していましたか? ほとんどの場合、私はちょうどこの地獄が何を意味しているか知りたいだけです。残りの部分はわかります。あなたがメモリ不足Python Docs ...

exception MemoryError 
    Raised when an operation runs out of memory but the situation may still be rescued 
    (by deleting some objects). The associated value is a string indicating what kind 
    of (internal) operation ran out of memory. Note that because of the underlying 
    memory management architecture (C’s malloc() function), the interpreter may not 
    always be able to completely recover from this situation; it nevertheless raises 
    an exception so that a stack traceback can be printed, in case a run-away program 
    was the cause. 

答えて

2

から

+0

私のPythonはそれについて知らないことが面白いです - それは2,5 GBで救済されました。私は限界が3 GiBだったと思ったが、どういうわけかここで早く来た。 – glglgl

+0

@glglgl:私はどこかで私のステートメントに "win32"がないかもしれない。私はすべてのOSのプロセスごとのメモリ制限についてはっきりしていません - 私は制限があることを知っています。 ;) –

0

python docs on exceptionsから:

例外MemoryError

(一部のオブジェクトを削除することで)操作がメモリ不足が、 状況はまだ救出することができる場合に送出されます。 関連付けられた値は、どの種類の(内部)演算がメモリ不足になったかを示す文字列です。 メモリ管理アーキテクチャ(Cのmalloc()関数)のため、 インタプリタは、この の状況から常に完全に回復するとは限りません。それにもかかわらず、暴走プログラムが原因でスタック トレースバックを印刷できるように例外が発生します。

は、だから、次のいずれか

  • は、システムメモリの使い果たしました(あなたはすべてのあなたの物理RAMを埋め、そしてあなたのページファイルのすべて。)これを行うことは可能ですが、あなたが暴走ループ作成を持っていた場合非常に多くのデータが非常に高速です。
  • 2 GBのプロセスごとのRAM制限があります。

32ビットシステム上のPythonは関係なく、あなたが持っているどのくらいの物理RAM、またはPAEが有効になっている場合の2Gメモリ制限があることに注意してください。これはPython固有のものではなく、オペレーティングシステムの制限です。

これはおそらく、問題の原因となったTimerクラスではなかった - それはあなたTimerで何かをしている間、メモリ不足にが起こったことだけです。

+0

40秒で私を殴ってください。 ;) –

関連する問題