Cap workers at cores-1 so encoding never stalls the system
This commit is contained in:
1 parent
c9c1b6d238
commit
62da58f93d
1 file changed
+11
-2
+11
-2
@@ -739,8 +739,16 @@ def build_psd(layers, width: int, height: int, out_path: str, workers: int,
|
|||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
# Main
|
# Main
|
||||||
# --------------------------------------------------------------------------
|
# --------------------------------------------------------------------------
|
||||||
|
def _safe_workers(workers: int) -> int:
|
||||||
|
"""Never use every CPU core: leave one for the system, otherwise the
|
||||||
|
RLE-encoding workers can stall the whole device."""
|
||||||
|
available = max(1, (os.cpu_count() or 2) - 1)
|
||||||
|
return max(1, min(workers, available))
|
||||||
|
|
||||||
|
|
||||||
def convert(ppl_path: str, out_path: str, preview_path: Optional[str] = None,
|
def convert(ppl_path: str, out_path: str, preview_path: Optional[str] = None,
|
||||||
workers: int = 4, type_layer: bool = False) -> None:
|
workers: int = 4, type_layer: bool = False) -> None:
|
||||||
|
workers = _safe_workers(workers)
|
||||||
import tempfile
|
import tempfile
|
||||||
with tempfile.TemporaryDirectory() as tmp:
|
with tempfile.TemporaryDirectory() as tmp:
|
||||||
with zipfile.ZipFile(ppl_path) as zf:
|
with zipfile.ZipFile(ppl_path) as zf:
|
||||||
@@ -884,8 +892,9 @@ def main():
|
|||||||
ap.add_argument("input", help="input .ppl file")
|
ap.add_argument("input", help="input .ppl file")
|
||||||
ap.add_argument("-o", "--output", help="output .psd path")
|
ap.add_argument("-o", "--output", help="output .psd path")
|
||||||
ap.add_argument("--preview", help="also write a downscaled composite PNG")
|
ap.add_argument("--preview", help="also write a downscaled composite PNG")
|
||||||
ap.add_argument("-j", "--workers", type=int, default=4,
|
ap.add_argument("-j", "--workers", type=int,
|
||||||
help="parallel workers for RLE encoding (default 4)")
|
default=max(1, (os.cpu_count() or 2) - 1),
|
||||||
|
help="parallel workers for RLE encoding (default: cores-1)")
|
||||||
ap.add_argument("--type-layer", action="store_true",
|
ap.add_argument("--type-layer", action="store_true",
|
||||||
help="convert text layers to editable TypeLayers (TySh) "
|
help="convert text layers to editable TypeLayers (TySh) "
|
||||||
"instead of rasterized pixels")
|
"instead of rasterized pixels")
|
||||||
|
|||||||
Reference in new issue
Block a user