并行运行无头模式LibreOffice生成PDF时零大小文件问题:竞态条件定位与规避方案咨询
并行运行无头模式LibreOffice生成PDF时零大小文件问题:竞态条件定位与规避方案咨询
我最近碰到个棘手的问题:用无头模式的LibreOffice批量转换几百个ODT文件到PDF,单进程跑实在太慢,于是尝试并行执行任务,结果发现部分PDF文件生成时没有任何报错,但却是零大小——单进程运行的时候从来没出现过这种情况,只要开两个进程就经常碰到。
我试过按照网上的建议,给每个并行进程指定独立的UserInstallation目录,用了这样的命令:
/usr/local/lib/libreoffice/program/soffice.bin "-env:UserInstallation=file:///tmp/oo.44978" --headless --convert-to pdf /tmp/oo.44978/046rEQ1Nee.odt --outdir /tmp/oo.44978
结果反而所有生成的文件都损坏了。
后来我还尝试给每个进程分配不同的socket端口,命令如下:
/usr/local/lib/libreoffice/program/soffice.bin --nofirststartwizard --accept="socket,host=127.0.0.1,port=53668;urp;" "-env:UserInstallation=file:///tmp/oo.53668" --headless --convert-to pdf /tmp/oo.53668/xaKag8N_3d.odt --outdir /tmp/oo.53668
但问题依然没有解决。
想请教一下:LibreOffice里的这个竞态条件到底出在哪里?有没有什么可行的办法能避开这个问题?
我的LibreOffice版本是7.6.4。
备注:内容来源于stack exchange,提问作者Alex Povolotsky
相关产品推荐
相关产品推荐

