检查计划任务是否处于活动状态的首选方法是什么?
我将在下面概述我的解决方案,但我不确定这确实是最好的方法。
计划任务是这样创建的:
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]}
请注意,它们是不同的。变量显示False
而ScheduledTasks[]
显示为假。这表明该变量实际上并不保存任务对象。通过直接修改变量myTask
我们不能修改任务。任务的真实状态由ScheduledTasks[]
.
假设ScheduledTaskObject
表达式中的第一个条目是与任务对应的唯一编号,这看起来是合理的。因此,对任务执行的任何手动操作都可能将此数字用作“句柄”,我们可以使用1
如下标识符检查任务的状态:
Cases[ScheduledTasks[], ScheduledTaskObject[1,__,state_] :> state]
我完全不确定这种方法(使用 中的标识符ScheduledTaskObject
)是否正确。我注意到新内核中已经有一些任务的情况(可能是由于前端——我打开了几个笔记本,一些带有动态元素,我一直在试验任务),有时会ScheduledTasks[]
返回几个任务具有相同的标识符(通常0
)。
总之:
通过标识符(他们的第一个数字
ScheduledTaskObject
)处理任务是一种可靠的方法吗?CreateScheduledTask
给定我们第一次创建它时得到的表达式,查询计划任务状态的正确方法是什么?
编辑:如果可能的话,最好有一个动态单元格显示计划任务的状态,而不使用太多 CPU。有人对如何做到这一点有任何想法吗?