0

Python でカスタム テスト ハーネスを作成しました (カスタム ロジックが多いため、既存のものは適切ではありませんでした)。Windows タスク スケジューラは、毎日 1 時間に 1 回それを開始します。テストの実行に 2 時間以上かかり、さらに成長しているため、問題が発生しています。今はシステム時刻を確認するだけで、 以外は何もしませhour % 3 == 0んが、それは好きではありません。次の内容を含むテキスト ファイルがあります。

# This is a comment
LatestTestedBuild = 25100

# Blank lines are skipped too
LatestTestRunStartedDate = 2011_03_26_00:01:21

# This indicates that it has not finished yet.
LatestTestRunFinishDate = 

手動でテストを開始すると、12:59:59.99 など、いつでも発生する可能性があります。競合状態を可能な限り排除したいと考えています。私はむしろ、何かが起こる実際の可能性について心配するのではなく、一度余分な努力をしたいと思います. したがって、このテキスト ファイルをアトミックにロックすることが最善の方法だと思います。

Python 2.7Windows Server 2008R2 Proおよびを使用してWindows 7 Proいます。私は余分なライブラリをインストールしたくありません (Pythonまだ同僚に「販売」されていませんが、ライセンスで許可されていれば、すべてを実装するファイルをローカルにコピーできます)。

したがって、これを解決するための優れた防弾方法を提案してください。

4

1 に答える 1

1

テストの実行を開始したら、__LOCK__または何かという名前のファイルを作成します。終了したら、try...finally ブロックを使用して削除し、常にクリアされるようにします。ファイルが存在する場合はテストを実行しないでください。コンピューターがクラッシュした場合などは、手動でファイルを削除してください。それ以上の賢さが必要だとは思えません。

本当に2時間のテストが必要ですか?! 私は 2 分間が妥当な時間だと思いますが、複雑な数値演算を実行している場合はもっと時間が必要になるかもしれません。

コード例:

import os
if os.path.exists("__LOCK__"):
    raise RuntimeError("Already running.") # or whatever
try:
    open("__LOCK__", "w").write("Put some info here if you want.")
finally:
    if os.path.exists("__LOCK__"):
        os.unlink("__LOCK__")
于 2011-03-26T21:01:29.400 に答える