スケジュールされたタスクがアクティブかどうかを確認するための推奨される方法は何ですか?
以下に私の解決策の概要を説明しますが、これが実際にそれを行うための最良の方法であるかどうかはわかりません。
スケジュールされたタスクは次のように作成されます。
In[1]:= myTask=CreateScheduledTask[Print["task 1"], 30]
Out[1]= ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]
次のような既存のタスクを確認できます。
In[2]:= ScheduledTasks[]
Out[2]= {ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]}
ScheduledTaskObject
(True
または)の最後のエントリはFalse
、タスクが開始されたかどうかを示します。
myTask
それでは、タスクを開始して、変数の内容を。によって返されるリストと比較してみましょうScheduledTasks[]
。
In[3]:= StartScheduledTask[myTask]
Out[3]= ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]
In[4]:= {ScheduledTasks[],myTask}
Out[4]= {{ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,True]},
ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]}
それらは異なることに注意してください。変数はfalseFalse
を示している間に表示されます。ScheduledTasks[]
これは、変数が実際にはタスクオブジェクトを保持していないことを示しています。変数myTask
を直接変更することによって、タスクを変更することはできません。タスクの実際の状態はによって返されScheduledTasks[]
ます。
ScheduledTaskObject
式の最初のエントリは、タスクに対応する一意の番号であると想定するのが妥当です。1
したがって、タスクで実行される手動操作では、おそらくこの番号を「ハンドル」として使用でき、次のような識別子を使用してタスクの状態を確認できます。
Cases[ScheduledTasks[], ScheduledTaskObject[1,__,state_] :> state]
ScheduledTaskObject
このアプローチ(からの識別子を使用)が正しいかどうかはまったくわかりません。新しいカーネルにすでにいくつかのタスクがあり(おそらくフロントエンドが原因です---いくつかのノートブックを開いていて、いくつかは動的要素を使用していて、タスクを実験してきました)、時々ScheduledTasks[]
いくつかのタスクを返す状況に気づきました同じ識別子で(通常は0
)。
要約すれば:
識別子(の最初の番号
ScheduledTaskObject
)でタスクを処理する信頼できる方法ですか?CreateScheduledTask
最初にタスクを作成したときに取得した式を前提として、スケジュールされたタスクの状態を照会する正しい方法は何ですか?
編集:可能であれば、CPUをあまり使用せずに、スケジュールされたタスクの状態を表示する動的セルがあると便利です。誰かがこれを行う方法について何かアイデアがありますか?