如何访问不同访问者之间共享的文件?

时间:2013-03-26 16:43:44

标签: java python concurrency

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

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

首先想到的是,当其中一个进程更新文件时,物理上会创建.lock文件,但也许还有其他一些需要考虑的解决方案?

谢谢。

3 个答案:

答案 0 :(得分:2)

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

或者,你可以在两个进程之间使用IPC信令,虽然这看起来比套接字麻烦得多,恕我直言。

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

答案 1 :(得分:0)

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

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

  • 每次向文件写入一行时,生产者都会确保output存在。
  • 当消费者准备好阅读该文件时,他会将output重命名为output.consume或其他内容。
  • 制作人注意到文件output不再存在,因此他重新打开它以进行输出。
  • 重新创建output文件后,使用者可以处理output.comsume文件。

答案 2 :(得分:0)

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

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