Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 是否有一种方法可以在不同进程(而不是线程)之间同步文件写入_Python 2.7_Locking_Shared File - Fatal编程技术网

Python 2.7 是否有一种方法可以在不同进程(而不是线程)之间同步文件写入

Python 2.7 是否有一种方法可以在不同进程(而不是线程)之间同步文件写入,python-2.7,locking,shared-file,Python 2.7,Locking,Shared File,我的项目需要在几个不同的物理机器上运行,这些机器之间共享文件系统。由此产生的一个问题是如何将写入同步到公共的单个文件。对于线程,这可以通过锁轻松实现,但是我的程序由分布在不同机器上的进程组成,我不知道如何同步。理论上,任何检查文件是否正在打开的方法或任何类似锁的解决方案都可以,但我自己无法破解这个问题。如果采用python方式,将特别受欢迎 只是一个想法 你不能将一个“锁定”文件放在与你试图写入的文件相同的目录中吗?在分布式进程中,检查此锁定文件。如果存在x数量的睡眠,请重试。同样,当当前打开文

我的项目需要在几个不同的物理机器上运行,这些机器之间共享文件系统。由此产生的一个问题是如何将写入同步到公共的单个文件。对于线程,这可以通过锁轻松实现,但是我的程序由分布在不同机器上的进程组成,我不知道如何同步。理论上,任何检查文件是否正在打开的方法或任何类似锁的解决方案都可以,但我自己无法破解这个问题。如果采用python方式,将特别受欢迎

只是一个想法

你不能将一个“锁定”文件放在与你试图写入的文件相同的目录中吗?在分布式进程中,检查此锁定文件。如果存在x数量的睡眠,请重试。同样,当当前打开文件的进程完成时,该进程会删除锁定文件吗

因此,如果在简单的案例2中有称为A和B的过程:

进程检查锁文件,如果它不存在,它将创建锁文件并对该文件执行所需的操作。完成后,它将删除此锁定文件


如果进程A检测到锁定文件,那么这意味着进程B拥有该文件,所以请睡眠,稍后再试。

多个进程都有文件锁定机制,即使是用多种语言编写的。 为此,使用操作系统特定的锁定机制。java JNI、C++等语言实现了这些锁定机制,以同步多个OS进程内的文件访问[在LTS轻量级线程内]。 为此,请查看特定于语言的本机文件同步机制

以下是一个基于Java的示例:

FileInputStream in = new FileInputStream(file);
try {
    java.nio.channels.FileLock lock = in.getChannel().lock();
    try {
        Reader reader = new InputStreamReader(in, charset);
        ...
    } finally {
        lock.release();
    }
} finally {
    in.close();
}
此锁定应独立于操作系统[在Unix系统、Windows等中工作]


对于这种情况,我建议使用更好的访问控制。

有没有办法。。改变这个设计?此外,共享是指SMB还是其他?为什么它是一个糟糕的设计?事实上,如果我能够实现同步,这将大大加快我的项目的速度抱歉,我对SMB了解不多,它看起来像一个分布式网络文件系统。就像Andrew文件系统isI没有说这是一个“糟糕”的设计一样。我只是提出了一个建议来反思一下:这是最合适的(根据某些指标或要求)方法吗?至于文件系统本身;不同的分布式文件系统(谈论flock)。。在任何情况下,请参见。资源非常丰富!我还将sth作为fcntl.lock进行了研究,但正如本文和您的文章所讨论的,它是否适用于远程文件系统还存在一些争议。关于网络文件系统是否合适,你有什么确定的信息吗?我想问题是创建文件的过程不是原子的,所以奇怪的是a和B同时创建检查文件。如果你可以将这个“文件”存储在某种db中,那么你可以在db级别锁定。不确定这是否有用。你也可以使用memcached来存储锁,我想我没有访问数据库的权限。你能详细介绍一下memcached方法吗?其想法是在缓存中放入一把钥匙,使其与锁相似,例如lock=true、lock=false。由于这是在内存中,如果您担心将写入文件写入磁盘所需的时间,它应该会有所帮助。。。“应该是独立于操作系统的”。。但这项任务并非如此,即使如此。此外,一般来说,它是。