阻止Python用Condor作业覆盖文件

阻止Python用Condor作业覆盖文件,python,condor,Python,Condor,我试图执行的python代码必须将两个不同的变量写入一个文件。我使用Condor来加速我的进程,这意味着python代码是同步执行的。我定义的写函数是: with open('output.txt', 'a') as results_file: results_file.write(str(gc_count) + '\n') results_file.write(str(length) + '\n') results_file.close() 但不幸的是,该文件总是以某

我试图执行的python代码必须将两个不同的变量写入一个文件。我使用Condor来加速我的进程,这意味着python代码是同步执行的。我定义的写函数是:

with open('output.txt', 'a') as results_file:
      results_file.write(str(gc_count) + '\n')
      results_file.write(str(length) + '\n')
results_file.close()

但不幸的是,该文件总是以某种方式覆盖结果。有人能帮助我如何用Condor将变量写入文本文件吗

即使文件模式设置为append,文件中的并发写入也会导致数据损坏


在多线程环境中,可以使用
threading.Lock
对象来保护写调用:

import threading
l = threading.Lock()   # l must be a global variable or a member of some class
然后在写入时,请求锁的权限,并在写入文件时释放锁:

l.acquire()
with open('output.txt', 'a') as results_file:
      results_file.write(str(gc_count) + '\n')
      results_file.write(str(length) + '\n')
l.release()

(旁白:您不需要文件上下文管理器中的最后一个
close

首先不需要
results\u file.close()
,您已经有了上下文管理器。然后,即使是append模式,如果您在并行线程/进程中运行此代码,您也需要一个互斥体。谢谢您的建议!你知道我在哪里可以找到使用互斥锁的例子吗?多线程还是多处理?我使用的是THCondor,它是多线程的。在这种情况下,使用THCondor
threading.Lock()
对象。非常感谢!现在也很符合逻辑,我明白我做错了什么!我对整个多线程环境的逻辑不是很清楚。非常感谢!