масштабируемость pythonqt для миллионов объектов - PullRequest
1 голос
/ 31 мая 2011

Я думал о добавлении pythonqt в свое приложение для написания плагинов. Мое приложение на C ++ и уже использует фреймворк Qt. Опция pythonqt кажется естественной для добавления компонентов GUI, но меня беспокоит, насколько хорошо программа будет масштабироваться, если я предоставлю класс с миллионами экземпляров. Нередко в памяти будет что-то вроде миллиона объектов определенного типа, и я хотел убедиться, что pythonqt сможет выставлять эти объекты, не делая их объектами QObject. Я думаю, это может быть хорошо, но перед тем, как начать, мне было интересно, было бы практично использовать такое большое количество классов с использованием pythonqt и есть ли у кого-нибудь опыт такого масштабирования.

По этой ссылке (http://pythonqt.sourceforge.net/Developer.html), кажется, что декораторы фактически загружают их только в python / Qt по запросу. Я просто не хочу, чтобы Qt еще больше занимал память, пытаясь отслеживать эти миллионы объектов без всякой причины .

Ответы [ 2 ]

2 голосов
/ 27 апреля 2012

PythonQt создает только оболочки Python для экземпляров C ++, которые открыты для Python.Поэтому, если вы не предоставляете Python миллионы экземпляров C ++ одновременно, он будет хорошо масштабироваться и создавать обертки только для открытых объектов.Эти обертки удаляются, когда они выходят из области видимости в Python, поэтому это также должно масштабироваться.

Лучший способ обернуть объект C ++ - это зарегистрировать производный класс QObject для каждого класса C ++, это позволяетзарегистрировать много классов без фактического создания / оценки декораторов, пока класс этого типа не станет видимым для Python.Взгляните на оболочки Qt, например, PythonQtWrapper_QImage, чтобы увидеть, как выглядит такой декоратор и как он регистрируется.

0 голосов
/ 31 мая 2011

Я ничего не сделал с этим, но кажется, что вы должны хотя бы взглянуть на слой QtQuick / QML.По вашему описанию трудно сказать, что происходит, но QML - это способ написания графических интерфейсов Qt без какого-либо программирования на C ++.Он основан на уже существующей и хорошо работающей реализации Qt / JavaScript и Bridge.

Что касается представления экземпляров классов языку сценариев, это обычно зависит от реализации моста.Хотя обычно используется какой-то код, его можно не брать с собой для каждого экземпляра, или он может быть лениво создан до такой степени, что у вас будет только намного меньше, чем миллионы упакованных экземпляров, чем оригиналы, которые вы храните в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...