Skip to content

Commit

Permalink
permits black to run in AWS Lambda:
Browse files Browse the repository at this point in the history
AWS Lambda and some other virtualized environment may not permit access
to /dev/shm on Linux and as such, trying to use ProcessPoolExecutor will
fail.

As using parallelism is only a 'nice to have' feature of black, if it fails
we gracefully fallback to a monoprocess implementation, which permits black
to finish normally.
  • Loading branch information
allanlegalstart committed Nov 5, 2019
1 parent 9b484d1 commit baee24f
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions black.py
Expand Up @@ -541,7 +541,14 @@ def reformat_many(
if sys.platform == "win32":
# Work around https://bugs.python.org/issue26903
worker_count = min(worker_count, 61)
executor = ProcessPoolExecutor(max_workers=worker_count)
try
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

try:
loop.run_until_complete(
schedule_formatting(
Expand All @@ -556,7 +563,8 @@ def reformat_many(
)
finally:
shutdown(loop)
executor.shutdown()
if executor is not None:
executor.shutdown()


async def schedule_formatting(
Expand All @@ -566,7 +574,7 @@ async def schedule_formatting(
mode: FileMode,
report: "Report",
loop: asyncio.AbstractEventLoop,
executor: Executor,
executor: Optional[Executor],
) -> None:
"""Run formatting of `sources` in parallel using the provided `executor`.
Expand Down

0 comments on commit baee24f

Please sign in to comment.