0

我已经用 Python 编写了一个自定义测试工具(由于大量自定义逻辑,现有的东西并不适合)。Windows 任务计划程序每天每小时启动一次。由于我的测试现在需要 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.7,Windows Server 2008R2 ProWindows 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 回答