Sza*_*lcs 5 wolfram-mathematica mathematica-8
检查计划任务是否处于活动状态的首选方法是什么?
我将在下面概述我的解决方案,但我不确定这确实是最好的方法.
计划任务的创建方式如下:
In[1]:= myTask=CreateScheduledTask[Print["task 1"], 30]
Out[1]= ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]
Run Code Online (Sandbox Code Playgroud)
我们可以检查这样的现有任务:
In[2]:= ScheduledTasks[]
Out[2]= {ScheduledTaskObject[1,Print[task 1],{30,Infinity},Automatic,False]}
Run Code Online (Sandbox Code Playgroud)
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]}
Run Code Online (Sandbox Code Playgroud)
请注意,它们不同.变量显示Falsewhile ScheduledTasks[]显示为false.这表明该变量实际上并不包含任务对象.通过myTask直接修改变量,我们无法修改任务.任务的真实状态由返回ScheduledTasks[].
尽管ScheduledTaskObject表达式中的第一个条目是与任务相对应的唯一编号,但看起来是合理的.因此,对任务执行的任何手动操作都可以使用此数字作为"句柄",我们可以使用以下标识符检查任务状态1:
Cases[ScheduledTasks[], ScheduledTaskObject[1,__,state_] :> state]
Run Code Online (Sandbox Code Playgroud)
我完全不确定这种方法(使用来自的标识符ScheduledTaskObject)是否正确.我注意到在新内核中已经有一些任务的情况(可能是由于前端---我打开了几个笔记本,有些是动态元素,我一直在试验任务),有时会ScheduledTasks[]返回几个任务具有相同的标识符(通常0).
综上所述:
它是通过标识符处理任务的可靠方式(来自它们的第一个数字ScheduledTaskObject)?
鉴于我们CreateScheduledTask在第一次创建它时得到的表达式,查询计划任务状态的正确方法是什么?
编辑:如果可能的话,让动态单元显示计划任务的状态,而不使用太多的CPU也是很好的.有没有人对如何做到这一点有任何想法?
ScheduledTaskObject确实id用于第一个参数的文档,我认为它确实是独一无二的.我无法ScheduledTaskObjects使用您声明的相同ID 复制多个(也没有0),所以如果您能提供一个最小的例子,那就太好了.
在任何情况下(假设多个任务具有相同的ID),您还可以通过检查任务的确切定义来缩小匹配范围.这是对你的简单修改.
Clear@pollState
pollState[task_ScheduledTaskObject] :=
Module[{id = Level[task, 1][[1]], expr = Level[task, 1][[2]]},
out = Cases[ScheduledTasks[],
ScheduledTaskObject[Evaluate@id, Evaluate@expr, __, state_] :>
state];
Return[If[out === {}, "Task not found", First@out]]]
Run Code Online (Sandbox Code Playgroud)
您可以创建Dynamic任务状态的输出,并将更新间隔设置为1秒(或更多),以便它不会不断轮询状态,从而减慢您的速度.
Dynamic[Refresh[pollState[myTask], UpdateInterval -> 1]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |