try 函数超时我有一个脚本,它调用许多其他脚本来报告设备进程和构建报告。 有时,来自流程工具的数据包含 JMP 无法处理的错误。所以我将调用包装在一个 Try() 函数中,如下所示:
For(ii=1, ii < nitems(BulkScriptsToRun), ii++,
try(
Include( BulkScriptsToRun[ii] );
);
);
有时包含的脚本不会崩溃,但也不会完成。
虽然这可能可以通过编辑脚本及其处理数据的方式来解决 - 它们不是我要编辑的脚本。
例如,如果需要超过 1 小时,有没有办法让 try 函数认为 try 失败?
还有另一种方法可以实现这一目标吗? 有没有办法告诉 Try() 应该放弃?
谢谢
脚本Re: try函数超时不,try() 没有超时机制;它与 C++ 的 try-throw-catch 机制非常相似。 正如您所猜测的那样,您需要将逻辑放入每个包含的脚本中,这可能会执行类似的操作
startSeconds = tickSeconds();
...
while(...
if( tickseconds() - startSeconds > 100, throw("Used more than 100 seconds") );
...)
我知道您说过您不能打开这些脚本进行编辑,但如果您这样做了,您可能希望它们对您的代码进行回调以指示进度。 然后,如果需要,您可以从回调中进行抛出。 无论哪种方式,您都需要在每个脚本中找到循环重复某些内容的点,并且超时取决于脚本的行为是否合理(以继续检查时间)。
Windows 任务调度程序也可能是解决方案的一部分;我没有使用它,但有很多线程询问它的问题。 我可以从脚本中关闭 jmp 程序吗?可能会提出一些建议。
Re: try函数超时如果您无法修改脚本,这听起来确实像是可以使用 Windows 任务计划程序完成的事情。 创建包含其他脚本的脚本,管理您可以在“包含”脚本中的所有错误,并将超时添加到调度程序任务。 在时间用完后,它将在任何地方终止执行。
一般来说,运行一批您无法控制的脚本很快就会变得混乱,因为您可能必须处理很多不同的事情(我不得不做这样的事情)。 以下是我面临的一些问题(或改进的机会):
- 管理命名空间冲突
- 删除/清除不必要的符号
- 从脚本不使用 Names Default To Here(1) 的情况中幸存下来
- 在包含的脚本中使用清除符号/删除全局来生存
- 关闭不必要的数据表和报告以节省内存
- 捕获将停止 JMP 的错误
- 在包含的脚本中使用 Exit/Quit
- 记录脚本执行以了解正确执行的内容
通过培训/修改包含的脚本,其中大部分都更容易处理。
Re: try函数超时我正在从任务计划程序运行主脚本。我可以在那里超时。 但是,如果其中一个脚本一小时一小时、一天又一天地出现相同的错误,则列表中该脚本下面的所有脚本将永远不会运行。
它们以主脚本的组织方式,列表后面的脚本运行频率较低,因此可能需要数周时间才能注意到它们被完全跳过。我可以颠倒列表的顺序 - 但是每次需要每 10 分钟运行一次的脚本都会被跳过,直到我在有问题的脚本中解决问题(这更糟)。
此外,主脚本会在所有脚本运行后报告自己的进度。如果任务被杀死,这将永远不会发生。
我目前的解决方案是:注释掉有问题的脚本,等待责任方足够关心来修复它。
有用。