Is there an alternative to sys.getsizeof () in PyPy?

I am trying to run a Python (2.7) script with PyPy, but I encountered the following error:

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. 

Now I really need to check the size of one nested dict at runtime, is there an alternative to sys.getsizeof() that I can use in PyPy? If not, how would I check the size of a nested object in PyPy?

+5
source share
1 answer

Alternatively, you can evaluate the memory usage of your process using

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

As your program performs, getrusage will give the total memory consumption of the process in the number of bytes or kilobytes. Using this information, you can estimate the size of your data structures, and if you start using, say, 50% of the total memory of your computer, then you can do something to process it.

+2
source

Source: https://habr.com/ru/post/1264956/


All Articles