I have a problem that needs to count the length of each ROS topic msg.
I modified rostopic(/opt/ros/smart-ros/lib/python2.7/dist-packages/rostopic / __ init__.py):
Class CallbackEcho(object) ->
Def callback (self, data, callback_args, current_time = None):
Print('message length =',sys.getsizeof(data)) #statics msg length
But when the message contains a vector or struct list, the length is incorrect.
Please help solve this problem?
Thanks.
The problem is the behaviour of sys.getsizeof:
Only the memory consumption directly attributed to the object is accounted for, not the memory consumption of objects it refers to.
This means only the size of the reference to a list is used to calculate the object size.
There are already a few questions dealing with this:
The solution is to use Pympler and its module asizeof which provides a function to the required calculation:
Function asizeof calculates the combined (approximate) size of one or several Python objects in bytes
After installing the package using pip
pip install pympler
and importing it to your code like
from pympler.asizeof import asizeof
you are able to print the correct object size in your callback like
print('Size: ' + str(asizeof(data)))