Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
Multithreading Ghostscript-使用100';用于输出为PDF文件的页面数_Multithreading_Ghostscript - Fatal编程技术网

Multithreading Ghostscript-使用100';用于输出为PDF文件的页面数

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

我是一个终端用户,不是一个程序员,但坚持这个项目

在打印这些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 -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 {}'