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 的錯誤
- 在包含的腳本中使用退出/退出
- 記錄腳本執行以了解正確執行的內容
通過培訓/修改包含的腳本,其中大部分都更容易處理。
Re: try函數超時我正在從任務計劃程序運行主腳本。我可以在那裡超時。 但是,如果其中一個腳本一小時一小時、一天又一天地出現相同的錯誤,則列表中該腳本下面的所有腳本將永遠不會運行。
它們以主腳本的組織方式,列表後面的腳本運行頻率較低,因此可能需要數週時間才能注意到它們被完全跳過。我可以顛倒列表的順序 - 但是每次需要每 10 分鐘運行一次的腳本都會被跳過,直到我在有問題的腳本中解決問題(這更糟)。
此外,主腳本會在所有腳本運行後報告自己的進度。如果任務被殺死,這將永遠不會發生。
我目前的解決方案是:註釋掉有問題的腳本,等待責任方足夠關心來修復它。
有用。