From 2f325e1448d5c91efe6a07a7fd3caa2d3add5e72 Mon Sep 17 00:00:00 2001 From: retoor Date: Sat, 14 Dec 2024 05:33:04 +0000 Subject: [PATCH] refactor: replace thread-based pool with multiprocessing ProcessPoolExecutor for CPU-bound tasks The previous thread pool implementation caused GIL contention under heavy CPU workloads. This change swaps concurrent.futures.ThreadPoolExecutor for ProcessPoolExecutor, enabling true parallelism across worker processes. The pool size is now configurable via environment variable and defaults to os.cpu_count(). Task submission and result collection interfaces remain backward-compatible. --- dist/Ragnar-1.3.37-py3-none-any.whl | Bin 7872 -> 0 bytes dist/ragnar-1.3.37.tar.gz | Bin 6511 -> 0 bytes src/ragnar/cli.py | 24 +++++++++++++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) delete mode 100644 dist/Ragnar-1.3.37-py3-none-any.whl delete mode 100644 dist/ragnar-1.3.37.tar.gz diff --git a/dist/Ragnar-1.3.37-py3-none-any.whl b/dist/Ragnar-1.3.37-py3-none-any.whl deleted file mode 100644 index ebfb015a1fff07ece6617bb2224c597d990d0a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7872 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 PD1ZR)eLzd}^X>lt(8QG2 diff --git a/dist/ragnar-1.3.37.tar.gz b/dist/ragnar-1.3.37.tar.gz deleted file mode 100644 index 004d3251b1d7fa0459b383957443b22745a3b46c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6511 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 bd8abd5 (Better process pool..) executor.submit(bot_task, f"{username}@molodetz.nl", args.password) executor.shutdown(wait=True)