我有用 Java 编写的代码,它将所有数据写入文件,然后我有处理这些数据的 python 脚本。
它们完全独立运行,python 脚本可以按计划运行,但它也会从文件中删除已处理的记录。问题是在第一个进程中的 java 代码将尝试编写某些内容而第二个进程中的 python 代码将尝试删除已处理的记录时访问文件的实现?
第一个想法是在其中一个进程更新文件时物理创建 .lock 文件,但也许还有其他一些解决方案需要考虑?
谢谢你。
我有用 Java 编写的代码,它将所有数据写入文件,然后我有处理这些数据的 python 脚本。
它们完全独立运行,python 脚本可以按计划运行,但它也会从文件中删除已处理的记录。问题是在第一个进程中的 java 代码将尝试编写某些内容而第二个进程中的 python 代码将尝试删除已处理的记录时访问文件的实现?
第一个想法是在其中一个进程更新文件时物理创建 .lock 文件,但也许还有其他一些解决方案需要考虑?
谢谢你。
您最好的选择可能是放弃使用文件并使用套接字。Java 程序生成并缓存输出,直到 Python 脚本正在侦听。然后 Python 脚本接受数据并处理它。
或者,您可以在两个进程之间使用 IPC 信号,尽管这似乎比套接字更混乱,恕我直言。
否则,.lock 文件似乎是您最好的选择。
确保 Java 和 Python 方法都在完成后关闭文件。
一种可能性是将您的 Python 脚本转换为 Jython。如果两个进程都在 JVM 中运行,那么您应该能够使用标准 Java 并发技术来确保您没有两个线程同时修改文件。
一种机制是让生产者HHMMSS
每隔一段时间将文件滚动到一个新名称(可能带有后缀),并且让消费者仅在文件滚动到新名称后才处理该文件。也许每5分钟一次?
另一种机制是让消费者自己滚动文件并让生产者注意到文件已经滚动并重新打开原始文件名。所以消费者总是在消费,output.consume
而生产者总是在写output
东西。
output
存在。output
为output.consume
或其他东西。output
不再存在,因此他重新打开它以进行输出。output
文件被重新创建,消费者就可以处理该output.comsume
文件。