我有一个运行在Linux上的Python应用程序。它每分钟从cron调用一次。它检查一个目录中的文件,如果找到一个文件,则处理该文件 - 这可能需要几分钟的时间。我不希望下一个cron作业获取当前正在处理的文件,因此我使用下面的代码锁定它,该代码调用portalocker。问题是它似乎不起作用。下一个cron作业成功返回了文件句柄,但该文件已经被处理。
def open_and_lock(full_filename):
file_handle = open(full_filename, 'r')
try:
portalocker.lock(file_handle, portalocker.LOCK_EX
| portalocker.LOCK_NB)
return file_handle
except IOError:
sys.exit(-1)
有什么办法可以锁定文件,以便其他进程无法获取它吗?
更新
感谢@Winston Ewert的提醒,我检查了代码并发现文件句柄在处理完成之前已被关闭。现在似乎可以工作了,只是第二个进程会在portalocker.lock上阻塞而不是抛出异常。