我有一个在无限循环中运行的Python 2.7.x进程,它监视Ubuntu服务器中的文件夹。
每当找到文件时,它会根据已经处理过的一组已知文件检查文件,并采取相应的行动。在伪代码中:
found = set()
while True:
for file in all_files("<DIR>"):
if file not in found:
process_file(file, found)
如何确保文件尚未开始复制?我不想说,拿MD5的文件总和或用另一个进程打开它,直到我确定它已经全部准备好了。
答案 0 :(得分:2)
由于锁定和其他系统级操作,在完成复制之前,您将无法对文件执行任何操作。
文件不能同时进行两次操作。
答案 1 :(得分:2)
最安全的解决方案是通过inotify
库使用Linux内核的pyinotify API。根据您的需要尝试IN_CREATE
和IN_MOVED_TO
事件。另请注意this blog post警告pyinotify库的一些实现问题。