Как получить длину ROS MSG в Python? - PullRequest
0 голосов
/ 03 февраля 2019

У меня проблема с подсчетом длины каждой темы ROS.

Я изменил 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

Но когда сообщение содержит вектор или структурный список, длина указана неверно.

Пожалуйста, помогите решить эту проблему?

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

Проблема заключается в поведении sys.getsizeof :

Учитывается только потребление памяти, непосредственно связанное с объектом, а не потребление памяти объектами, к которым оно относится.

Это означает, что для расчета размера объекта используется только размер ссылки на список.

Уже есть несколько вопросов, касающихся этого:

Решение состоит в том, чтобы использовать Pympler и его модуль asizeof , который обеспечивает функцию для требуемого вычисления:

Функция asizeof вычисляетобъединенный (приблизительный) размер одного или нескольких объектов Python в байтах

После установки пакета с помощью pip

pip install pympler

и импортируйте его в свой код, например

from pympler.asizeof import asizeof

вы можете напечатать правильный размер объекта в вашем обратном вызове, как

print('Size: ' + str(asizeof(data)))
...