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