編集:質問とコードを更新しました。
バッチ ファイルから (数百のファイルに対して) Python スクリプトを実行しています。問題は、一部のファイルの python スクリプトの実行に時間がかかることです。私が望むのは、私の python スクリプトが 1 つのファイルで 5 分以上実行されないようにすることです。5 分以上かかる場合は、以下のバッチ ファイル コードに記述されているように、実行中のスクリプトを強制終了して次のファイルに移動するだけです。
私が望むのは、コードが 1 つのファイルに費やすことができる最大時間として 300 秒を定義することです。300 秒以上かかる場合は、バッチ ファイルで強制終了する必要があります。ただし、300 秒未満の場合は 300 秒待たずに、すぐに次のステートメントに移動する必要があります。
@echo off
setlocal enableextensions disabledelayedexpansion
echo FILE NO: 1
rem filename1 is not a variable name but the name of the file itself
start "Python" python "Code.py" filename1 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename1 var2 & call :timeoutProcess "python.exe" 300
echo FILE NO: 2
start "Python" python "Code.py" filename2 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename2 var2 & call :timeoutProcess "python.exe" 300
echo FILE NO: 3
start "Python" python "Code.py" filename3 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename3 var2 & call :timeoutProcess "python.exe" 300
echo FILE NO: 4
start "Python" python "Code.py" filename4 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename4 var2 & call :timeoutProcess "python.exe" 300
echo FILE NO: 5
start "Python" python "Code.py" filename5 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename5 var2 & call :timeoutProcess "python.exe" 300
.
.
.
.
.
.
.
echo FILE NO: 200
start "Python" python "Code.py" filename200 var1 & call :timeoutProcess "python.exe" 300
start "Python" python "Code.py" filename200 var2 & call :timeoutProcess "python.exe" 300
exit /b
:timeoutProcess process timeout [leave]
rem process = name of process to monitor
rem timeout = timeout in seconds to wait for process to end
rem leave = 1 if process should not be killed on timeout
for /l %%t in (1 1 %~2) do (
timeout /t 1 >nul
tasklist | find /i "%~1" >nul || exit /b 0
)
if not "%~3"=="1" taskkill /f /im "%~1" >nul
exit /b 1
filename5 まで実行すると、このコードは完全に正常に動作します。ただし、ファイル名 200 まで実行すると、このコードはファイル名 1 に対してのみ実行され、すぐにファイル名 13 に移動し、次にファイル名 170 に移動します。この問題が理解できません。構文エラーはないようです。
私はバッチファイルを書くのが初めてです。この問題の解決にご協力ください。この問題を (タイムアウトの代わりに) 解決するためのより良い方法がある場合は、お知らせください。
PS: Eventlet パッケージから Python の Timeout 関数も使用しようとしましたが、この関数はファイルに対して適切に機能しないため、代わりにバッチ ファイルからタイムアウトを試す必要があると考えました。私は Windows マシンで作業しており、Python 2.7 を使用しています。