Multithreading Ghostscript-使用100';用于输出为PDF文件的页面数
我是一个终端用户,不是一个程序员,但坚持这个项目 在打印这些PS文件之前,我们需要将大量PS文件转换为PDF以供查看(校对)。每个PS文件包含800页或更少的页面。PS文件通常为60-250兆欧 运行Multithreading Ghostscript-使用100';用于输出为PDF文件的页面数,multithreading,ghostscript,Multithreading,Ghostscript,我是一个终端用户,不是一个程序员,但坚持这个项目 在打印这些PS文件之前,我们需要将大量PS文件转换为PDF以供查看(校对)。每个PS文件包含800页或更少的页面。PS文件通常为60-250兆欧 运行Ghostscript命令的计算机是运行在Server2012上的VM安装的Win7 64位。VM有10个内核、40千兆ram和一个使用15000 rpm驱动器的4磁盘RAID-0。如果这有帮助的话,还有大量未使用的容量 我尝试过的命令有: gswin32c.exe -q -dSAFER -dNOP
Ghostscript
命令的计算机是运行在Server2012
上的VM
安装的Win7 64位
。VM
有10个内核、40千兆ram和一个使用15000 rpm驱动器的4磁盘RAID-0。如果这有帮助的话,还有大量未使用的容量
我尝试过的命令有:
gswin32c.exe -q -dSAFER -dNOPAUSE
-dBATCH -sDEVICE=pdfwrite |
-sOutputFile="..\output.pdf" -f "..\IN\input.ps"
及
我做了一些测试,比较了这两个命令的rip速度,第二个版本带有Threads选项,速度较慢。其中一个测试文件有90.5兆PS数据,导致PDF文件中有716页。非线程版本需要4.85分钟,而使用线程版本需要5.93分钟
如果您有任何建议,我们将不胜感激。同时运行它们 你有10个内核,你应该至少有10个同时运行 找到一组性能更好的选项,单独运行,只需同时运行它们 一个简单的方法是创建10个批处理文件,每个批处理文件都有一个命令列表,代表10%的文件。然后在单独的命令窗口中启动所有这些批处理文件,然后去吃午饭,看看会有什么结果 通过脚本编写、分叉、批处理和其他技术,您可以更容易地实现自动化 但我敢打赌,在编辑器中创建10个bat文件会更快,每个文件都有一个基本相同的命令列表,使用剪切粘贴和搜索替换 如果你经常这样做,那么也许可以找到一些帮助脚本 如果这是一次性的事情,那么只需仔细研究并创建文件 然后坐下来,看着CPU点亮一小时,风扇在虚拟机上旋转 如果你想进行实验,你可以试着一次运行5、6、7、8,检查时钟时间,看看哪一个网络的总吞吐量最快,并适当地将“10”改为X 但这是利用这台机器的所有容量的最简单方法。我提取了约10k PDF的“第一页”,并使用与并行处理所有内容。这是我使用的“命令”:
find ./data/pdfs -name '*.pdf' | parallel \
--verbose --progress \
'gs -q -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -dNOPAUSE -dBATCH -r500x500 -o {}.jpeg {}'
这是在OSX上运行的,但是您可以通过Windows获得GNU并行。感谢您的想法。我将对此进行测试。每个月都会有大量的工作,因此需要编写脚本。上周我们得到了8500个源pdf文件,当转换为PS时(添加到输出PS文件中的附加变量数据导致187个PS文件,包含45000个单独页面。gs命令行选项是否有任何更改有助于加快速度?-dNumRenderingThreads对pdfwrite绝对没有任何影响,因为(TADA!)它不会呈现任何内容。性能上的差异将归因于setvmthreshold。从PostScript到PDF的转换本质上是单线程的,因为您需要解释PostScript,并且无法并行化(某些文件可以,但一般不可以)奇怪的是,没有-dSecretGoFasterSwitch,唯一真正的解决方案是下面Will Hartung提出的,运行多个实例。
find ./data/pdfs -name '*.pdf' | parallel \
--verbose --progress \
'gs -q -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -dNOPAUSE -dBATCH -r500x500 -o {}.jpeg {}'