正确避免R / W文件死锁

时间:2015-11-21 14:47:54

标签: python file python-3.x deadlock

Python脚本创建子进程proc = subprocess.Popen(),每隔约1秒向p.txt写几行。我想在p.txt运行时实时处理此脚本中的proc次更新。

...
def seek_file(file, process):
    while process.poll() is None:
        l = file.readline().strip()
        if not l:
            sleep(0.1)
            continue
        else:
            yield tuple(l.split('='))
...
p_file = open('p.txt')
data_tuples = seek_file(p_file, proc)
for d in data_tuples:
    print(d)
...

为什么这段代码偶尔会变成死锁状态?处理频繁更新文件和显示进度的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我怀疑这是死锁,只要它在编写文件的过程之前就会旋转。

当您在文件中到达EOF时,即使文件随后增长,文件对象也不会生成新行。您可以通过f.seek(f.tell())重置此行为,因为搜索(到当前位置)将重置EOF指示符。