gpt4 book ai didi

wolfram-mathematica - 如何查询计划任务的状态(事件与否)?

转载 作者:行者123 更新时间:2023-12-04 19:17:14 24 4
gpt4 key购买 nike

检查计划任务是否处于事件状态的首选方法是什么?

我将在下面概述我的解决方案,但我不确定这确实是最好的方法。

一个计划任务是这样创建的:

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 中的最后一个条目( TrueFalse )似乎指示任务是否已启动。

现在开始任务,比较变量 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]}

请注意,它们有所不同。变量显示 FalseScheduledTasks[]显示错误。这表明该变量实际上并不保存任务对象。通过修改变量 myTask直接我们不能修改任务。任务的真实状态由 ScheduledTasks[] 返回.

尽管 ScheduledTaskObject 中的第一个条目看起来很合理expression 是与任务对应的唯一编号。所以对任务执行的任何手动操作都可能使用这个数字作为“句柄”,我们可以使用标识符 1 检查任务的状态。像这样:
Cases[ScheduledTasks[], ScheduledTaskObject[1,__,state_] :> state]

我完全不确定这种方法(使用来自 ScheduledTaskObject 的标识符)是否正确。我注意到在新内核中已经有一些任务的情况(可能是由于前端——我打开了几个笔记本,一些带有动态元素,我一直在试验任务),有时 ScheduledTasks[]返回多个具有相同标识符的任务(通常是 0 )。

总之:
  • 通过标识符(来自 ScheduledTaskObject 的第一个数字)处理任务是否是一种可靠的方法?
  • 给定我们从 CreateScheduledTask 得到的表达式,查询计划任务状态的正确方法是什么?当我们第一次创建它时?

  • 编辑:如果可能的话,在不使用太多 CPU 的情况下,让一个动态单元格显示计划任务的状态也会很好。有没有人对如何做到这一点有任何想法?

    最佳答案

    ScheduledTaskObject 的文档确实使用 id对于第一个论点,我认为它确实是独一无二的。我一直无法重现多个 ScheduledTaskObjects具有与您声称的相同的 ID(也不是带有 0 的 ID),因此如果您能提供一个最小的示例,那就太好了。

    在任何情况下(假设多个任务具有相同的 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]]]

    您可以创建一个 Dynamic输出任务状态并将更新间隔设置为 1 秒(或更多),这样它就不会不断轮询状态,从而减慢您的速度。
    Dynamic[Refresh[pollState[myTask], UpdateInterval -> 1]]

    关于wolfram-mathematica - 如何查询计划任务的状态(事件与否)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7939280/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com