Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当鼠标移动到PYQTGraph应用程序上时,PYQTGraph应用程序的速度会减慢_Python_Qt_Pyqt_Pyqtgraph - Fatal编程技术网

Python 当鼠标移动到PYQTGraph应用程序上时,PYQTGraph应用程序的速度会减慢

Python 当鼠标移动到PYQTGraph应用程序上时,PYQTGraph应用程序的速度会减慢,python,qt,pyqt,pyqtgraph,Python,Qt,Pyqt,Pyqtgraph,我有一个多线程(通过pyqt)应用程序,它绘制实时数据(数据在第二个线程中处理,并通过pyqt信号传递给gui线程进行绘制)。如果我将鼠标放在应用程序上,它将继续全速运行(通过调用app.processEvents())之间的时间差来衡量)。一旦我开始移动鼠标,更新速度就会减慢为爬行,当我停止移动鼠标时,更新速度会再次增加 有人知道我如何解决这个/调试这个问题吗 代码非常冗长和复杂,所以我不想在这里发布。谢谢 场景中可能有接受自己鼠标输入的项目,但如果没有看到代码,很难说。特别要注意的是,复杂的

我有一个多线程(通过pyqt)应用程序,它绘制实时数据(数据在第二个线程中处理,并通过pyqt信号传递给gui线程进行绘制)。如果我将鼠标放在应用程序上,它将继续全速运行(通过调用
app.processEvents()
)之间的时间差来衡量)。一旦我开始移动鼠标,更新速度就会减慢为爬行,当我停止移动鼠标时,更新速度会再次增加

有人知道我如何解决这个/调试这个问题吗


代码非常冗长和复杂,所以我不想在这里发布。谢谢

场景中可能有接受自己鼠标输入的项目,但如果没有看到代码,很难说。特别要注意的是,复杂的绘图线是可点击的——计算鼠标光标与如此复杂形状的交点非常昂贵


解决性能问题的最佳(有些人可能会说是唯一的)方法是评测应用程序:在不移动鼠标的情况下运行
python-m cProfile-s cumulative your_script.py
,然后在移动鼠标的情况下再次运行(请确保花大量时间移动鼠标),然后比较输出,看看解释器在哪里花费了所有的时间

可能看起来很明显,但您是否检查过是否有任何活动的mouseMoveEvent事件处理程序?我还没有明确定义任何。我怎样才能找到默认值呢?我想看看你的代码会很好。在代码中调用
processEvents
并不理想,因此这可能是问题的一部分。谢谢,我可以在分析代码中看到来自GraphicsView.py和graphicscene.py的
mouseMoveEvent
调用(在和{build-in-method exec}之后的累积配置文件中分别为第三和第四)。我有一个
GraphicsLayoutWidget
对象,使用
addPlot
创建绘图。但我无法立即看到调用
mouseMoveEvent
的是什么。在对我的python脚本进行精简编码以演示问题时,我发现它是由第二个数据线程
run()引起的
调用。我不知道当鼠标移动时,为什么这会减慢整个程序的速度,或者为什么它会触发
mouseMoveEvent
。我将在下面发布精简的代码。无论如何,我们应该找一个不同的地方来讨论该代码,但我会给出一些提示:1)您的线程消耗大量CPU并不断挂断GIL。在这种情况下,您应该期望性能会下降。2)仅仅因为代码被定义为QThread的方法,并不意味着代码必须在另一个线程中运行。在您的例子中,第二个线程只会浪费CPU周期——数据生成实际上发生在主线程中;我已经从QThread定义转移到QObject,moveToThread代码结构。