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

scalability of pythonqt for millions of objects

本文关键字:可伸缩性 对象 数百万 pythonqt      更新时间:2023-10-16

我正在考虑将pythonqt添加到我的应用程序中以编写插件。我的应用程序是用C++编写的,并且已经使用了Qt框架。pythonqt选项似乎很适合添加GUI组件,但我担心如果我公开一个具有数百万实例的类,程序的扩展性会有多好。内存中有一百万个特定类型的对象并不罕见,我想确保pythonqt能够公开这些对象,而不会使它们成为QObject。我想这可能很好,但在我开始之前,我想知道使用pythonqt公开这么多类是否实用,以及是否有人有扩展这么多的经验。

从此链接(http://pythonqt.sourceforge.net/Developer.html),看起来装饰器实际上只是根据请求将它们加载到python/Qt中。我只是不希望Qt无缘无故地试图跟踪这数百万个对象,从而占用更大的内存。

PythonQt只为公开给Python的C++实例创建Python包装器。因此,如果不同时向Python公开数百万个C++实例,它将很好地扩展,并且只为暴露的对象创建包装器。这些包装器在Python中超出范围时会被删除,因此也应该进行扩展。

包装C++对象的最佳方法是为每个C++类注册一个decorator QObject派生类,这允许注册许多类,而无需实际创建/评估decorator,直到该类型的类对Python可见。看看Qt包装器,例如PythonQtWrapper_QImage,看看这样的装饰器是什么样子的以及它是如何注册的。

我没有做太多的工作,但听起来你至少应该看看QtQuick/QML层。很难从你的描述中判断出发生了什么,但QML是一种在不进行任何C++编码的情况下编写Qt GUI的方法。它建立在已经存在并运行良好的Qt/JavaScript实现和桥接之上。

至于将类的实例公开给脚本语言,这通常取决于桥的实现。虽然通常会涉及到一些代码,但您可能不会对每个实例产生这种情况,或者它可能会被延迟实例化,以至于您的封装实例数量将远远少于内存中原始实例的数百万个。