pythonqt对数百万个对象的可伸缩性

问题描述

| 我正在考虑将pythonqt添加到我的用于编写插件的应用程序中。我的应用程序是C ++,并且已经使用了Qt框架。 pythonqt选项似乎很自然地适合添加GUI组件,但是我担心如果暴露具有数百万个实例的类,程序的伸缩性如何。在内存中有大约一百万个某种类型的对象并不少见,我想确保pythonqt能够公开这些对象而无需使其成为QObjects。我猜可能很好,但是在开始之前,我想知道使用pythonqt公开这么多的类是否可行,是否有人有足够的经验来扩展它。 从此链接(http://pythonqt.sourceforge.net/Developer.html),似乎装饰器实际上仅应请求将它们加载到python / Qt中。我只是不想让Qt更大的内存占用试图无缘无故地跟踪这些数百万个对象。     

解决方法

        我没有做太多事情,但听起来似乎至少应该看看QtQuick / QML层。从您的描述中很难得知发生了什么,但是QML是一种无需进行任何C ++编码即可编写Qt GUI的方法。它建立在已经存在且运行良好的Qt / JavaScript实现和Bridge的基础上。 至于将类的实例暴露给脚本语言,通常取决于桥的实现。虽然通常涉及一些代码,但您可能不会在每个实例上都需要这样做,或者可能会延迟实例化到这样的程度,即您所拥有的包装实例比保存在内存中的原始实例要少得多。     ,        PythonQt仅为暴露给Python的C ++实例创建Python包装器。 因此,如果您不同时将数百万个C ++实例公开给Python, 它将很好地缩放并仅为暴露的对象创建包装。 当这些包装超出Python范围时,这些包装将被删除,因此这也应扩展。 包装C ++对象的最好方法是为每个C ++类注册一个装饰器QObject派生类,这允许注册许多类而无需实际创建/评估装饰器,直到该类型的类对Python可见为止。 看一下Qt包装器,例如PythonQtWrapper_QImage,以查看此类装饰器的外观以及其注册方式。