2013-03-26 126 views
1

我有写在Java上的代码,将所有数据写入文件,然后我有处理这些数据的Python脚本。如何访问不同访问器之间共享的文件?

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

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

谢谢。

回答

0

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

另一种机制是有消费卷文件本身,并有生产商的通知,该文件已经推出,并重新打开原始文件名。所以消费者总是从output.consume消费,生产者总是写信给output什么的。

  • 每次将一行写入文件时,制作人都确保output存在。
  • 当消费者准备读取该文件,重命名,他向outputoutput.consume东西。
  • 生产者注意到文件output不再存在,所以他重新打开它输出。
  • 一旦output文件是重新创建消费者可以处理output.comsume文件。
0

确保Java和Python方法关闭文件当他们完成。

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

2

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

或者,你可以使用两个进程之间的IPC的信号,虽然这似乎是一个很多比插座,恕我直言,比较杂乱。

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

+0

在这种情况下,消息可能比套接字更健壮。 – 2013-03-26 16:57:43

+0

@BurhanKhalid:那肯定是对的,并且可以让你通知另一个进程发生了错误。好的一点。 – jedwards 2013-03-26 17:01:26