1

我有用 Java 编写的代码,它将所有数据写入文件,然后我有处理这些数据的 python 脚本。

它们完全独立运行,python 脚本可以按计划运行,但它也会从文件中删除已处理的记录。问题是在第一个进程中的 java 代码将尝试编写某些内容而第二个进程中的 python 代码将尝试删除已处理的记录时访问文件的实现?

第一个想法是在其中一个进程更新文件时物理创建 .lock 文件,但也许还有其他一些解决方案需要考虑?

谢谢你。

4

3 回答 3

2

您最好的选择可能是放弃使用文件并使用套接字。Java 程序生成并缓存输出,直到 Python 脚本正在侦听。然后 Python 脚本接受数据并处理它。

或者,您可以在两个进程之间使用 IPC 信号,尽管这似乎比套接字更混乱,恕我直言。

否则,.lock 文件似乎是您最好的选择。

于 2013-03-26T16:53:28.600 回答
0

确保 Java 和 Python 方法都在完成后关闭文件。

一种可能性是将您的 Python 脚本转换为 Jython。如果两个进程都在 JVM 中运行,那么您应该能够使用标准 Java 并发技术来确保您没有两个线程同时修改文件。

于 2013-03-26T16:47:54.663 回答
0

一种机制是让生产者HHMMSS每隔一段时间将文件滚动到一个新名称(可能带有后缀),并且让消费者仅在文件滚动到新名称后才处理该文件。也许每5分钟一次?

另一种机制是让消费者自己滚动文件并让生产者注意到文件已经滚动并重新打开原始文件名。所以消费者总是在消费,output.consume而生产者总是在写output东西。

  • 每次将一行写入文件时,生产者都会确保它output存在。
  • 当消费者准备好读取文件时,他会重命名outputoutput.consume或其他东西。
  • 生产者注意到该文件output不再存在,因此他重新打开它以进行输出。
  • 一旦output文件被重新创建,消费者就可以处理该output.comsume文件。
于 2013-03-26T16:47:38.127 回答