gpt4 book ai didi

windows-xp - 在过载的机器上共享文件

转载 作者:行者123 更新时间:2023-12-04 06:08:36 25 4
gpt4 key购买 nike

我有一台运行 Windows XP 的计算机,我用它来处理大量数据、更新监视器和银行数据。一般来说,它充满了工作。

一个具有实时数据的特定文件对许多用户有用。我们有两个程序需要这个文件,一个显示数值数据,一个绘制数值数据。任何用户都可以在他们的机器上运行任一程序的实例。这些程序搜索每秒更新的实时数据文件。它们都是用 Perl 编写的,我被要求不要更改任何一个程序。

由于计算机上的负载很大,我目前正在运行在单独的计算机上进行计算并创建实时数据文件的程序。该程序只是将实时文件写入过载的计算机。因为 Windows 没有原子写入,我创建了一种写入不同扩展名的方法,删除旧的实时文件,然后将新文件移动到正确的名称。不幸的是,随着计算机上用户负载的增加,写入需要更长的时间(这并不理想但可以存活)但更烦人的是,删除旧的实时文件和将新文件移动到正确名称之间的时间会增加很多,导致 Perl 程序出错。两个程序都检查文件修改时间是否已更改(都不检查文件锁定)。如果文件丢失,他们会生气并输出错误消息。

我想第一个行动方案是将整个过程从过载的计算机上移开。我的另一个想法是在不同的机器上创建文件的多个副本,让不同的用户从不同的地方读取文件(虽然这将是一个真正的黑客)。

我是世界网络和文件共享的新手,但我知道有更好的方法来做到这一点。坦率地说,整个方法都有点被黑,但我来这里时就是这样。

最后,值得一提的是,同样的进程在 UNIX 机器上运行并且没有这些问题。出于这个原因,我觉得责任归咎于原子写入的需要。我一直在互联网上搜索解决此问题的方法,并尝试了多种不同的方法(例如我当前的扩展切换方法)。

谁能指出我正确的方向,以便我可以解决这个问题?

我的代码是用 Python 编写的。

最佳答案

os.rename()说:

os.rename(src, dst)
Rename the file or directory src to dst. If dst is a directory,
OSError will be raised. On Unix, if dst exists and is a file,
it will be replaced silently if the user has permission. The
operation may fail on some Unix flavors if src and dst are on
different filesystems. If successful, the renaming will be an
atomic operation (this is a POSIX requirement). On Windows, if
dst already exists, OSError will be raised even if it is a file;
there may be no way to implement an atomic rename when dst names
an existing file.

鉴于在 Windows 上,您必须在将新文件重命名为旧文件之前删除旧文件,并且禁止您修改读取脚本以容忍丢失文件的可配置超时(正确的解决方案)或使用生产者(另一个正确的解决方案),您唯一的解决方法可能是使用进程调度程序来制作 {delete, rename}操作看起来是原子的。编写一个 C 程序,它只查找新文件、删除旧文件并重命名新文件。以高优先级运行“伪原子重命名”过程,并祈祷它不会在删除和重命名之间进行任务切换。

关于windows-xp - 在过载的机器上共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8051950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com