From a672422b0b334e29b363dc06404c7fcbcab703c0 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 22 Jul 2020 00:20:07 -0700 Subject: [PATCH] Enable pikepdf mmap in other contexts --- src/ocrmypdf/_sync.py | 14 ++++++++------ src/ocrmypdf/helpers.py | 8 ++++++++ src/ocrmypdf/pdfinfo/info.py | 3 ++- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/ocrmypdf/_sync.py b/src/ocrmypdf/_sync.py index a3c64604..2932367d 100644 --- a/src/ocrmypdf/_sync.py +++ b/src/ocrmypdf/_sync.py @@ -64,7 +64,12 @@ from ocrmypdf._validation import ( report_output_file_size, ) from ocrmypdf.exceptions import ExitCode, ExitCodeException -from ocrmypdf.helpers import available_cpu_count, check_pdf, samefile +from ocrmypdf.helpers import ( + available_cpu_count, + check_pdf, + pikepdf_enable_mmap, + samefile, +) from ocrmypdf.pdfa import file_claims_pdfa log = logging.getLogger(__name__) @@ -242,6 +247,7 @@ def worker_init(max_pixels: int): # the parent process, so ensure workers get it set. Not needed when running # threaded, but harmless to set again. PIL.Image.MAX_IMAGE_PIXELS = max_pixels + pikepdf_enable_mmap() def exec_concurrent(context: PdfContext): @@ -332,11 +338,7 @@ def run_pipeline(options, *, plugin_manager, api=False): ): debug_log_handler = configure_debug_logging(Path(work_folder) / "debug.log") - try: - if pikepdf._qpdf.set_access_default_mmap(True): - log.debug("pikepdf mmap enabled") - except AttributeError: - log.debug("pikepdf mmap not available") + pikepdf_enable_mmap() try: check_requested_output_file(options) diff --git a/src/ocrmypdf/helpers.py b/src/ocrmypdf/helpers.py index d2523496..d8e1f4a3 100644 --- a/src/ocrmypdf/helpers.py +++ b/src/ocrmypdf/helpers.py @@ -222,6 +222,14 @@ def clamp(n: T, smallest: T, largest: T) -> T: return max(smallest, min(n, largest)) +def pikepdf_enable_mmap(): + try: + if pikepdf._qpdf.set_access_default_mmap(True): + log.debug("pikepdf mmap enabled") + except AttributeError: + log.debug("pikepdf mmap not available") + + def deprecated(func): """Warn that function is deprecated""" diff --git a/src/ocrmypdf/pdfinfo/info.py b/src/ocrmypdf/pdfinfo/info.py index 8f15e6b9..372cc468 100644 --- a/src/ocrmypdf/pdfinfo/info.py +++ b/src/ocrmypdf/pdfinfo/info.py @@ -33,7 +33,7 @@ from pikepdf import PdfMatrix from ocrmypdf._concurrent import exec_progress_pool from ocrmypdf.exceptions import EncryptedPdfError -from ocrmypdf.helpers import Resolution, available_cpu_count +from ocrmypdf.helpers import Resolution, available_cpu_count, pikepdf_enable_mmap from ocrmypdf.pdfinfo.layout import get_page_analysis, get_text_boxes logger = logging.getLogger() @@ -639,6 +639,7 @@ worker_pdf = None def _pdf_pageinfo_sync_init(infile): global worker_pdf # pylint: disable=global-statement + pikepdf_enable_mmap() worker_pdf = pikepdf.open(infile)