Skip to content

Commit 16307ad

Browse files
committed
Refactor pool handling to be a contextmanager for simpler usage and better reuse of code
1 parent f6d023b commit 16307ad

File tree

1 file changed

+19
-18
lines changed

1 file changed

+19
-18
lines changed

tasks.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,22 @@
2020
from multiprocessing import Pool
2121
from invoke import task
2222
from invoke.context import Context
23+
from contextlib import contextmanager
24+
25+
26+
@contextmanager
27+
def managed_pool(pool_size):
28+
"""
29+
Context manager for multiprocessing Pool that ensures proper cleanup.
30+
31+
Automatically handles pool.close() and pool.join() when exiting the context.
32+
"""
33+
pool = Pool(pool_size)
34+
try:
35+
yield pool
36+
finally:
37+
pool.close()
38+
pool.join()
2339

2440

2541
def fetch_github_releases():
@@ -348,19 +364,14 @@ def pull(c, version, cpu=None):
348364

349365
print(f" -- Found {len(versions)} version(s) to pull")
350366

351-
pool = Pool(get_pool_size(cpu))
352-
353367
configs = [
354368
{'context': c, 'version': v}
355369
for v in versions
356370
]
357371

358-
try:
372+
with managed_pool(get_pool_size(cpu)) as pool:
359373
pool.map(_docker_pull, configs)
360374
print(f" -- Completed pulling {len(versions)} version(s)")
361-
finally:
362-
pool.close()
363-
pool.join()
364375

365376

366377
@task(help={
@@ -401,19 +412,14 @@ def build(c, version, cpu=None):
401412

402413
print(f" -- Found {len(versions)} version(s) to build")
403414

404-
pool = Pool(get_pool_size(cpu))
405-
406415
configs = [
407416
{'context': c, 'version': v}
408417
for v in versions
409418
]
410419

411-
try:
420+
with managed_pool(get_pool_size(cpu)) as pool:
412421
pool.map(_docker_build, configs)
413422
print(f" -- Completed building {len(versions)} version(s)")
414-
finally:
415-
pool.close()
416-
pool.join()
417423

418424

419425
@task(help={
@@ -454,19 +460,14 @@ def push(c, version, cpu=None):
454460

455461
print(f" -- Found {len(versions)} version(s) to push")
456462

457-
pool = Pool(get_pool_size(cpu))
458-
459463
configs = [
460464
{'context': c, 'version': v}
461465
for v in versions
462466
]
463467

464-
try:
468+
with managed_pool(get_pool_size(cpu)) as pool:
465469
pool.map(_docker_push, configs)
466470
print(f" -- Completed pushing {len(versions)} version(s)")
467-
finally:
468-
pool.close()
469-
pool.join()
470471

471472

472473
@task(help={})

0 commit comments

Comments
 (0)