我有一个
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我使用portalocker进行python.
lockfile =open(lockfilename,'w+') portalocker.lock(lockfile,portalocker.LOCK_EX| portalocker.LOCK_NB)
在win7上也可以正常工作.
解决方法
我得到了同事的答案,这很简单. Java不使用POSIX锁,但是python可以.所以他们不能互操作……
实际上他们可以,但只有当一个人可以强制两个运行时使用相同的锁定机制.但是这迫使你对它进行硬编码,使代码变得脆弱并且非常依赖于平台.