gpt4 book ai didi

perl - 将可重定位的 win32 Perl 减少到尽可能少的文件和字节

转载 作者:行者123 更新时间:2023-12-01 03:37:11 25 4
gpt4 key购买 nike

我正在尝试在 Windows HTCondor 计算集群上使用 perl 程序。 HTCondor 在 Windows 上的工作方式是将所有依赖项复制到一个临时目录(用作各种 chroot),然后在指定的输出移动到指定位置后删除该目录。

如果我只用 perl.exe 和 perl514.dll 做这样的工作:perl -e "print qq/hello\n/"并告诉集群运行 200 次,然后每次复制结束大约需要 15 秒,这是可以接受的开销。这几乎是所有时间都花在通过网络重复复制文件然后删除它们上。 echo_hello.bat运行 200 次每次复制大约需要两秒钟。

我遇到的问题是,当我尝试使用完整的 55MB 和 2,289 个文件的 perl 发行版时,单个“hello”rep 需要四分钟的复制和删除时间,这是 Not Acceptable 。当我尝试进行多次运行时,机器上的磁盘会停止运行,试图同时处理所有代表的所有文件操作,所以它根本不起作用。我不知道最终可能需要多长时间才能完成,因为我在半小时后放弃了并且没有完成任何工作。

我认为 PAR::Packer 可能会解决这个问题,但不是。我试过print_hello.exe像这样创建:pp -o print_hello.exe -e "print qq/hello\n/" .它仍然使事情陷入停顿,显然是通过淹没文件系统。我认为 PAR::Packer 可执行文件会生成大量临时文件,因为它会从存档中提取所需的文件。我认为当有一堆并发的小文件操作时,Windows 文件系统完全窒息。

那么我怎样才能将我构建的 perl 缩减为 6MB 和十几个文件呢?我真的只使用了少量的核心模块,不需要bin 中的大部分废话。和 lib ,但我不知道如何以理智的方式继续撕掉东西。

有没有一种自动化的方法来去除不需要的文件和模块?

我知道 TCL 有很多工具可以将文件打包到一个未压缩的存档中,然后可以通过“虚拟文件系统”访问该存档而无需扩展文件。有没有办法用 perl 本身来做这件事,就像用 PAR 一样?问题是 PAR 压缩所有内容,然后必须提取到临时文件,而不是直接通过虚拟文件系统层工作。 (如果我理解正确的话。)

我对 perl 的使用实际上是作为脚本层。它嵌入在模拟中。所以我真的在运行依赖 per514.dll 的 my_simulation.exe,但你明白了。除了使用 HTCondor 集群之外,我实际上也无法对它做任何事情。所以没有必要跳出框框思考我应该使用什么来代替 perl,以及我可以在 Windows 和 HTCondor 中进行哪些管理调整,谢谢。

最佳答案

您可以使用Module::ScanDeps获取 perl 的实际依赖项列表。太可怕了,花了很长时间,PAR::Packer解压了整个应用程序,所以我决定自己构建可执行文件。

Here我准备好使用将 perl 依赖项收集到某个目录的脚本了吗?减少 perl 模块的数量可能对您有用,例如通过在复制后手动删除一些依赖项。

理论上(我从未尝试过),下一步可以将所有纯 perl 依赖项合并到单个文件中(如 deps.pm );尽管由于 perl 的自动加载魔法和其他一些技巧,这可能并不重要。

关于perl - 将可重定位的 win32 Perl 减少到尽可能少的文件和字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33553011/

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