Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
将可重新定位的win32 Perl减少到尽可能少的文件和字节_Perl_Par - Fatal编程技术网

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

将可重新定位的win32 Perl减少到尽可能少的文件和字节,perl,par,Perl,Par,我正在尝试在Windows HTCondor计算集群上使用perl程序。windows上的HTCondor的工作方式是将所有依赖项复制到一个临时目录(用作排序的chroot),然后在指定的输出移动到指定位置后删除该目录 如果我只使用perl.exe和perl514.dll,然后做这样的工作:perl-e“print qq/hello\n/”,并告诉集群运行200次,那么每次复制大约需要15秒,这是可以接受的开销。这几乎是通过网络重复复制文件然后删除它们所花费的全部时间echo_hello.bat

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

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

我遇到的问题是,当我尝试使用55MB和2289文件的完整perl发行版时,一个“hello”代表需要四分钟的复制和删除时间,这是不可接受的。当我尝试执行多次运行时,机器上的磁盘会停止尝试同时处理所有重复中的所有文件操作,因此根本不起作用。我不知道最终要花多长时间才能完成,因为半个小时后我就放弃了,而且还没有完成任何工作

我想PAR::Packer可能会解决这个问题,但不是。我尝试了如下创建的
print\u hello.exe
pp-o print\u hello.exe-e“print qq/hello\n/”
。它仍然使事情陷入停顿,显然是因为文件系统被淹没了。我认为PAR::Packer可执行文件在从归档文件中取出所需文件时会生成大量临时文件。我认为当有大量并发的小文件操作时,windows文件系统完全阻塞了

那么,我怎样才能把我构建的perl压缩到6MB和十几个文件呢?我实际上只使用了少量的核心模块,不需要使用
bin
lib
中的大部分垃圾,但我不知道如何以一种理智的方式继续删除内容

是否有一种自动剥离不需要的文件和模块的方法

我知道TCL有一系列功能,可以将文件打包到单个未压缩的归档文件中,然后通过“虚拟文件系统”进行访问,而无需扩展文件。用Perl本身有点像PAR有什么办法吗?问题是PAR压缩所有东西,然后必须提取到临时文件,而不是直接通过虚拟文件系统层工作。(如果我理解正确的话。)

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

您可以使用非常好的工具列出程序所需的模块

据我所知,它不能在任何地方下载,但复制并粘贴到您自己的
ListDependencies.pm
文件很简单

您应该阅读模块中的POD文档以获取使用说明,您可以使用这些说明来获取perl的实际依赖项列表。当
PAR::Packer
解包整个应用程序时,花费了大量的时间,这很糟糕,因此我决定自己构建可执行文件

是我的现成脚本,它将perl依赖项收集到某个目录中;减少perl模块的数量可能会很有用,例如,在复制后手动删除一些依赖项


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

您可以使用非常好的工具列出程序所需的模块。据我所知,它不能在任何地方下载,但复制并粘贴到您自己的
ListDependencies.pm
文件很简单。您应该阅读模块内的POD文档以获取使用说明我可能只依赖于10个模块(只是一个猜测),但实际上可能需要几十个文件。所以我仍然需要一些方法将它们浓缩成一个档案。正是这些小文件副本让我痛苦。我不认为确定哪些内容可以删除是一个超级困难的问题。ListDependencies可能会有所帮助,谢谢。然而,问题主要是如何让文件倒计时。“10个模块,但实际上可能有几十个文件”这是基于任何真实的信息吗?我可以肯定地告诉你,十个模块中的2289个文件远远不够。大多数模块——特别是仅限Perl的模块——只包含一个文件,而对于较大的模块,不需要POD文档文件。您还没有给出任何关于您的程序可能具有哪些依赖关系的线索,因此我们对此一无所知。如果你一时兴起就否定了你得到的每一个建议,并且没有给出应用程序的任何细节,那么你就不会得到任何有用的答案。结合使用scandeps.pl和删除一些东西来查看是否一切都正常似乎是我能做的最好的方法。