2017-03-02 13 views
5

私はPyPyでのPython(2.7)スクリプトを実行しようとしていますが、私は次のようなエラーが発生した:PyPyのsys.getsizeof()の代替手段はありますか?

TypeError: sys.getsizeof() is not implemented on PyPy. 

A memory profiler using this function is most likely to give results 
inconsistent with reality on PyPy. It would be possible to have 
sys.getsizeof() return a number (with enough work), but that may or 
may not represent how much memory the object uses. It doesn't even 
make really sense to ask how much *one* object uses, in isolation 
with the rest of the system. For example, instances have maps, 
which are often shared across many instances; in this case the maps 
would probably be ignored by an implementation of sys.getsizeof(), 
but their overhead is important in some cases if they are many 
instances with unique maps. Conversely, equal strings may share 
their internal string data even if they are different objects---or 
empty containers may share parts of their internals as long as they 
are empty. Even stranger, some lists create objects as you read 
them; if you try to estimate the size in memory of range(10**6) as 
the sum of all items' size, that operation will by itself create one 
million integer objects that never existed in the first place. 

は今、私は本当に、プログラムの実行中に1つのネストされた辞書のサイズを確認する必要がありますsys.getsizeof()の代替手段はありますかPyPyで使用できますか?そうでない場合は、PyPyでネストされたオブジェクトのサイズを確認するにはどうすればよいですか?

+0

"プログラムの実行中にネストされたdictのサイズを本当に確認する必要があります。" - 'sys.getsizeof'はCPythonの下でさえも正しいツールではありませんでした。 dictキーや値など、オブジェクトが参照する他のオブジェクトのサイズは考慮されません。 – user2357112

+0

これは簡単です。ネストされたdictを反復処理し、オブジェクト全体の累積サイズを計算する関数を実装できます。 http://stackoverflow.com/questions/449560/how-do-i-determine-the-size-of-an-object-in-python –

+2

私は人々がまだ '' sys.getsizeof() ''たとえそれが意味をなさないのであれば、テキストの壁にさらに詳細が説明されていても、例を使って完成させることができます。 –

答えて

2

また、あなたのプログラムが実行されているとおり、GETRUSAGEからはバイトまたはキロバイト数でプロセスの合計メモリ消費量を与える

import resource 
resource.getrusage(resource.RUSAGE_SELF).ru_maxrss 

を使用して、プロセスのメモリ使用量を測ることができます。この情報を使用して、データ構造のサイズを見積もることができます。そして、マシンの総メモリの50%を使用し始めると、それを処理するための何かができます。

+0

これは、プロセス全体のメモリ消費量を管理する方法ですが、特定のオブジェクトに割り当てられたメモリに関する情報は得られません。それは私の特定の場合に働くことができます。ありがとう。 –

関連する問題