Enable pikepdf mmap in other contexts

This commit is contained in:
James R. Barlow
2020-07-22 00:20:07 -07:00
parent addc2cbad0
commit a672422b0b
3 changed files with 18 additions and 7 deletions

View File

@@ -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)

View File

@@ -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"""

View File

@@ -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)