在您检查某物和对其采取行动之间,任何时间代码都可以执行,您将处于竞争状态。避免这种情况的一种方法(也是Python中通常的方法)是尝试然后处理异常
while True: mydir = next_dir_name() try: os.makedirs(mydir) break except OSError, e: if e.errno != errno.EEXIST: raise# time.sleep might help here pass
如果您有很多线程试图创建一系列可预测的目录,那么这仍然会引发很多异常,但是最终您会到达那里。在这种情况下,最好只有一个线程来创建目录