From c5f87fb4ef49a0e0e497c75dffa2260a9cc33585 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Langa?= Date: Fri, 8 May 2020 16:06:05 +0200 Subject: [PATCH] Make the use of a ThreadPoolExecutor explicit --- black.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/black.py b/black.py index 2b718f6..2668747 100644 --- a/black.py +++ b/black.py @@ -2,7 +2,7 @@ import ast import asyncio from abc import ABC, abstractmethod from collections import defaultdict -from concurrent.futures import Executor, ProcessPoolExecutor +from concurrent.futures import Executor, ThreadPoolExecutor, ProcessPoolExecutor from contextlib import contextmanager from datetime import datetime from enum import Enum @@ -613,6 +613,7 @@ def reformat_many( sources: Set[Path], fast: bool, write_back: WriteBack, mode: Mode, report: "Report" ) -> None: """Reformat multiple files using a ProcessPoolExecutor.""" + executor: Executor loop = asyncio.get_event_loop() worker_count = os.cpu_count() if sys.platform == "win32": @@ -622,9 +623,10 @@ def reformat_many( executor = ProcessPoolExecutor(max_workers=worker_count) except OSError: # we arrive here if the underlying system does not support multi-processing - # like in AWS Lambda, in which case we gracefully fallback to the default - # mono-process Executor by using None - executor = None + # like in AWS Lambda, 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) try: loop.run_until_complete( @@ -651,7 +653,7 @@ async def schedule_formatting( mode: Mode, report: "Report", loop: asyncio.AbstractEventLoop, - executor: Optional[Executor], + executor: Executor, ) -> None: """Run formatting of `sources` in parallel using the provided `executor`. -- 2.39.2