我见过一些与此相关的问题,但没有一个能确切回答我的问题。在
我有一个简短的python脚本,它执行一些简单的任务,然后将一些文本输出到日志文件中,等待更多的输入,然后循环。在
根据其他任务的结果,文件有时以写入模式(“w”)打开,有时以追加模式(“a”)打开。为了简单起见,我们假设它处于写模式/附加模式50/50。在
我打开文件时说:
with open(fileName, mode) as file:
写信给他们说:
^{pr2}$当这些文件被打开、写入、附加等等时,我希望命令提示符对它们执行一些读取活动(特别是findstr)。在
1)如果脚本试图写入命令窗口正在读取的同一个文件,会发生什么情况?在
2)有没有一种方法可以显式地将open设置为shared模式?在
3)使用“logger”模块是否有助于/处理此问题,而不仅仅是手动生成自己的日志文件?在
谢谢
您所指的通常称为“竞争条件”,即两个程序试图同时读/写同一个文件。有些操作系统可以通过实现文件锁定互斥系统来帮助您避免这种情况,但在大多数操作系统上,您只会得到损坏的文件、崩溃的程序,或两者兼而有之。在
下面是一篇有趣的文章,讨论如何在python中避免竞争条件: http://blog.gocept.com/2013/07/15/reliable-file-updates-with-python/
作者的一个建议是将文件复制到一个临时文件中,在那里进行写入/附加,然后将文件移回原位。当文件长时间处于打开状态时,会发生争用情况,这种情况下,您实际上永远不会在python中打开主文件,因此可能发生冲突的唯一时间点是在操作系统的复制/移动操作期间,这会快得多。在
相关问题 更多 >
编程相关推荐