From 865f536143e73da60f7c6b60924eb2472deb1cfe Mon Sep 17 00:00:00 2001 From: Terrance <4025899+Terrance@users.noreply.github.com> Date: Sat, 9 May 2020 17:22:23 +0100 Subject: [PATCH] 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`. --- src/black/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/black/__init__.py b/src/black/__init__.py index 3ab4bc7..41c688b 100644 --- a/src/black/__init__.py +++ b/src/black/__init__.py @@ -662,9 +662,9 @@ def reformat_many( worker_count = min(worker_count, 61) try: executor = ProcessPoolExecutor(max_workers=worker_count) - except OSError: + except (ImportError, OSError): # 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 # any good due to the Global Interpreter Lock) executor = ThreadPoolExecutor(max_workers=1) -- 2.39.2