【问题标题】:Solved: Python multiprocessing imap BrokenPipeError: [Errno 32] Broken pipe pdftoppm已解决:Python 多处理 imap BrokenPipeError: [Errno 32] Broken pipe pdftoppm
【发布时间】:2019-12-05 21:07:59
【问题描述】:

首先我要说的是,这不是其他类似问题的重复,在这些问题中,人们倾向于更密切地管理员工群体。

在使用 multiprocessing.Pool.imap 时,我一直在努力解决我的代码引发的以下异常:

  File "/usr/local/bin/homebrew/Cellar/python@2/2.7.17/lib/python2.7/multiprocessing/process.py", line 267, in _bootstrap
    self.run()
  File "/usr/local/bin/homebrew/Cellar/python@2/2.7.17/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/bin/homebrew/Cellar/python@2/2.7.17/lib/python2.7/multiprocessing/pool.py", line 122, in worker
    put((job, i, (False, wrapped)))
  File "/usr/local/bin/homebrew/Cellar/python@2/2.7.17/lib/python2.7/multiprocessing/queues.py", line 390, in put
    return send(obj)
IOError: [Errno 32] Broken pipe

这在执行以下主程序时出现在不同的地方:

    pool = mp.Pool(num_workers)
    # Calculate a good chunksize (based on implementation of pool.map)
    chunksize, extra = divmod(lengthData, 4 * num_workers)
    if extra:
        chunksize += 1

    func = partial(pdf_to_txt, input_folder=inputFolder, junk_folder=imageJunkFolder, out_folder=outTextFolder,
                   log_name=log_name, log_folder=None,
                   empty_log=False, input_folder_iterator=None,
                   print_console=True)

    flag_vec = pool.imap(func, (dataFrame['testo accordo'][i] for i in range(lengthData)), chunksize)
    dataFrame['flags_conversion'] = pd.Series(flag_vec)
    dataFrame.to_excel("{0}logs/{1}.xlsx".format(outTextFolder, nameOut))
    pool.close()
    pool.join()

仅供参考,partial 函数获取非 OCR PDF 文件,将它们拆分为每个页面的图像,并使用 pytesseract 运行 OCR。

我在以下机器上运行代码:

This is a physical machine (PowerEdge R930) running RedHat 7.7 (Linux 3.10.0).

Processor:  Intel(R) Xeon(R) CPU E7-8880 v3 @ 2.30GHz (x144)
Memory:     1.48 TiB
Swap:       7.81 GiB
Uptime:     21 days

也许我应该降低块大小?我真的不清楚。我注意到,当服务器上可用的工作人员较少时,代码似乎运行得更好......

【问题讨论】:

  • 使用上下文管理器来处理池。
  • 嗨@AlexanderCécile 非常感谢您的回答。你能把我重定向到这个的一些来源吗?我不熟悉上下文管理器..

标签: python python-multiprocessing python-tesseract pdftoppm


【解决方案1】:

经过一番痛苦,我发现问题出在pdftoppm(即使用pdf2image)。似乎 pdftoppm 有时会卡住而不会引发任何异常。

如果有人遇到这个问题,我强烈建议切换到 PyMuPDF 以从 pdf 中提取图像。更快更稳定!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2020-11-12
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多