Как проверить, считает ли FrontEnd, что оценка все еще выполняется? - PullRequest
1 голос
/ 13 апреля 2011

Есть ли способ программно проверить, считает ли FrontEnd, что оценка все еще выполняется? Или даже лучше: есть ли способ проверить, есть ли у FrontEnd ожидающие входные данные для отправки в ядро?

P.S. Этот вопрос возник из предыдущего вопроса .

EDIT

При оценке ячейки во FrontEnd мы обычно создаем очередь входных данных для ядра.

Мне нужна функция, которая будет возвращать True, если FrontEnd отправит ядру последний вход из очереди входов из EvaluationNotebook[]. Или, другими словами, мне нужна функция, которая возвращает True, если этот текущий вход является последним входом в очереди входов, созданных FrontEnd.

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Это должно работать.Конечно, вы должны запустить его в ядре, отличном от того, которое выполняет оценку, которую вы хотите проверить.

NotebookEvaluatingQ[nb_] := (
 SelectionMove[nb, All, Notebook];
 Or @@ Map["Evaluating" /. # &, Developer`CellInformation[nb]]
)
0 голосов
/ 13 апреля 2011

Очевидно, что лучше все настроить перед использованием такого инструмента, как Monitor. Например,

Monitor[
  Do[Pause[6], {i, 10}],
i]

позволит вам наблюдать за ходом индексной переменной i. Если вы не настроили что-то заранее, вы могли бы что-то сделать, используя кнопку «Оценка прерывания» в меню «Оценка». Например, попробуйте следующее:

Do[Pause[6], {i, 10}]

Теперь, подождите шесть или более секунд и выберите «Оценка прерывания». Затем вы можете проверить состояние i, чтобы увидеть, как далеко оно продвинулось. Вы возобновляете оценку, используя Продолжить в разделе «Средства управления отладчиком».

...