有没有办法以编程方式检查FrontEnd是否认为评估仍在运行? 甚至更好:有没有办法检查FrontEnd是否有一些待发送的输入发送到内核?
P.S。这个问题来自previous question。
修改
在评估FrontEnd中的Cell时,我们通常会为内核创建一个输入队列。
我需要一个函数,如果FrontEnd已经从True
向内核发送了输入队列的最后一个输入,它将返回EvaluationNotebook[]
。或者换句话说,如果当前输入是FrontEnd生成的输入队列的最后一个输入,我需要一个返回True
的函数。
答案 0 :(得分:2)
这应该有效。当然,您必须在与执行要检查的评估的内核不同的内核中运行它。
NotebookEvaluatingQ[nb_] := (
SelectionMove[nb, All, Notebook];
Or @@ Map["Evaluating" /. # &, Developer`CellInformation[nb]]
)
答案 1 :(得分:0)
显然,最好先使用像Monitor
这样的工具进行设置。例如,
Monitor[
Do[Pause[6], {i, 10}],
i]
将允许您观察索引变量i
的进度。如果您事先没有进行设置,则可以使用“评估”菜单下的“中断评估”按钮执行某些操作。例如,尝试以下操作:
Do[Pause[6], {i, 10}]
现在,等待六秒或更长时间,然后选择“中断评估”。然后,您可以检查i
的状态,以了解它的详细程度。您可以使用“调试器控件”下的“继续”继续评估。