我有一个java应用程序和一个python启动器。java应用程序锁定一个文件,以避免多个启动程序使用以下代码:
java.nio.channels.FileLock lock = lockWrapper.getChannel().tryLock();
if (lock == null) {
logger.info("Anotheris already running");
}
lock.release();
staticLock = lockWrapper.getChannel().lock();
python启动器尝试用fcntl锁定同一个文件,而且可以。两个java进程不能做到这一点,两个python进程都不能独占地锁定同一个文件。但是java和python可以,在任何方向。
我正在使用openjdk 6和python2.7的xubuntu上。我使用PortalLocker for python。
在win7上也能正常工作。在
我从同事那里得到了答案,很简单。Java不使用POSIX锁,但python使用。所以他们不能互相操作。。。在
实际上,它们可以,但前提是可以强制两个运行时使用相同的锁定机制。但这迫使你硬编码,使代码变得脆弱而且非常依赖于平台。在
这在linuxel6上适用。 使用FileLock和Python2.6的OracleJava7可以正确地锁定文件。 编辑:使用F_SETLKW进行阻塞/等待操作。在
Python代码不可移植。在我的环境里这不是问题。在
参考号:https://docs.python.org/2/library/fcntl.html SVR4搜索页面(在底部)
参考号:https://community.dur.ac.uk/physics.astrolab/file_locking.html
相关问题 更多 >
编程相关推荐