Handle ImportError from multiprocessing module (#1400)

Termux's Python environment doesn't provide sem_open, but fails with a
nested `ImportError` on import attempts:

    ImportError: cannot import name 'SemLock' from '_multiprocessing'

This updates the existing handling for AWS Lambda to catch both
`OSError` and `ImportError`.
This commit is contained in:
Terrance 2020-05-09 17:22:23 +01:00 committed by GitHub
parent f6393a20fc
commit 865f536143
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -662,9 +662,9 @@ def reformat_many(
worker_count = min(worker_count, 61) worker_count = min(worker_count, 61)
try: try:
executor = ProcessPoolExecutor(max_workers=worker_count) executor = ProcessPoolExecutor(max_workers=worker_count)
except OSError: except (ImportError, OSError):
# we arrive here if the underlying system does not support multi-processing # we arrive here if the underlying system does not support multi-processing
# like in AWS Lambda, in which case we gracefully fallback to # like in AWS Lambda or Termux, in which case we gracefully fallback to
# a ThreadPollExecutor with just a single worker (more workers would not do us # a ThreadPollExecutor with just a single worker (more workers would not do us
# any good due to the Global Interpreter Lock) # any good due to the Global Interpreter Lock)
executor = ThreadPoolExecutor(max_workers=1) executor = ThreadPoolExecutor(max_workers=1)