
我有一个带有计算的Python脚本。 大约有2000次迭代的循环,每个循环都被认为是几分钟。
我决定巧妙地调试该脚本,显示迭代次数中一些指标的图形。 并且,由于计算了下一次迭代,因此计划和更新。
最简单的方法是
散景。 更准确地说,使用bokeh服务器绘制图形。 怎么做-现在我告诉你。
首先,启动服务器:Servochka自带bokeh本身,因此在pip安装bokeh之后,只需在控制台中键入bokeh serve即可启动服务器。
为什么需要它? 然后显示图表
- 没有阻止其余代码的执行(因为它发生在浏览器中的一个单独的过程中),
- 这样图形才能响应窗口大小调整(或最小化-最大化)
- 这样一来,我们就可以随时通过Python流程随意更改此计划!
这样做是这样的:
import time import sys from bokeh.plotting import figure from bokeh.client import pull_session from bokeh.models import ColumnDataSource
以前,我也必须这样做,但从轻率地说,以前的决定并不是那么好。 我一生中没有尝试过的...
小心,镇流器!您可以通过在每次迭代时手动拉出plt.draw()来在非阻塞模式下使用matplotlib。 的确,matplotlib在非阻塞模式下没有自己的来自GUI的消息处理,并且如果该窗口最小化或与另一个窗口关闭,我们必须等待下一次迭代来重绘它。 马马虎虎,但是可以调试。
在Negro中,可以生成具有相同matplotlib图表的图片并将其转储到磁盘。 拐杖也很凶,但是却缺少鱼。 或在没有图形的远程计算机上。
您可以用一种很酷的方式做到这一点:使用PyQt,将计算代码包装在QObject中,将其推入单独的流中,将matplotlib图形包装在QWidget中(或使用Qt Data Visualizaion或PyQtGraph中的图形),通过带有槽口的信号将数学连接到图形,就会有幸福。 没错,这有点像快速调试解决方案,需要教Qt,但是我做了几次。
您可以在单独的流程中(例如,使用aiohttp + PyQt + PyQtGraph)筹集一个小型服务器应用程序来绘制图形,可以通过主要流程中的REST API将其关闭。 一旦执行完此操作,但它也没有吸引快速修复调试的麻烦。
您可以写入某种数据库(当前流行什么?),然后让Grafan在其中流行。 没错,您需要同时放置数据库和Grafan,对其进行配置,并且通常会麻烦写入数据库。 可能也可以通过文件来实现,但是对于两张千分之一的图形来说,它们就像大炮麻雀...
或者,您可以了解plotly.dash,将数学放在单独的流中,将其包装在dash应用程序中,然后进行大量的垃圾处理。 尽管这是必要的,但我尚未掌握。
总之,调试成功!