Skip to content

Commit f4cf6eb

Browse files
authored
Merge pull request #812 from AnswerDotAI/fastprogress-lazy-import
Lazy import `progress_bar`
2 parents 4ba74eb + 2c24b4e commit f4cf6eb

3 files changed

Lines changed: 24 additions & 7 deletions

File tree

fastcore/_modidx.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@
582582
'fastcore.parallel._done_pg': ('parallel.html#_done_pg', 'fastcore/parallel.py'),
583583
'fastcore.parallel._f_pg': ('parallel.html#_f_pg', 'fastcore/parallel.py'),
584584
'fastcore.parallel.bg_task': ('parallel.html#bg_task', 'fastcore/parallel.py'),
585+
'fastcore.parallel.import_progress_bar': ('parallel.html#import_progress_bar', 'fastcore/parallel.py'),
585586
'fastcore.parallel.parallel': ('parallel.html#parallel', 'fastcore/parallel.py'),
586587
'fastcore.parallel.parallel_async': ('parallel.html#parallel_async', 'fastcore/parallel.py'),
587588
'fastcore.parallel.parallel_gen': ('parallel.html#parallel_gen', 'fastcore/parallel.py'),

fastcore/parallel.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/03a_parallel.ipynb.
44

55
# %% auto #0
6-
__all__ = ['threaded', 'startthread', 'startproc', 'parallelable', 'ThreadPoolExecutor', 'ProcessPoolExecutor', 'parallel',
7-
'parallel_async', 'bg_task', 'run_procs', 'parallel_gen']
6+
__all__ = ['threaded', 'startthread', 'startproc', 'parallelable', 'ThreadPoolExecutor', 'ProcessPoolExecutor',
7+
'import_progress_bar', 'parallel', 'parallel_async', 'bg_task', 'run_procs', 'parallel_gen']
88

99
# %% ../nbs/03a_parallel.ipynb #569d18c6
1010
from .imports import *
@@ -122,13 +122,16 @@ def map(self, f, items, *args, timeout=None, chunksize=1, **kwargs):
122122
except Exception as e: self.on_exc(e)
123123

124124
# %% ../nbs/03a_parallel.ipynb #f5327cb3
125-
try: from fastprogress import progress_bar
126-
except: progress_bar = None
125+
def import_progress_bar():
126+
try: from fastprogress import progress_bar
127+
except ImportError: return None
128+
return progress_bar
127129

128130
# %% ../nbs/03a_parallel.ipynb #529e1bb1
129131
def parallel(f, items, *args, n_workers=defaults.cpus, total=None, progress=None, pause=0,
130132
method=None, threadpool=False, timeout=None, chunksize=1, **kwargs):
131133
"Applies `func` in parallel to `items`, using `n_workers`"
134+
progress_bar = import_progress_bar()
132135
kwpool = {}
133136
if threadpool: pool = ThreadPoolExecutor
134137
else:
@@ -192,6 +195,7 @@ def _done_pg(queue, items): return (queue.get() for _ in items)
192195
# %% ../nbs/03a_parallel.ipynb #1122caee
193196
def parallel_gen(cls, items, n_workers=defaults.cpus, progress=True, **kwargs):
194197
"Instantiate `cls` in `n_workers` procs & call each on a subset of `items` in parallel."
198+
progress_bar = import_progress_bar()
195199
if not parallelable('n_workers', n_workers): n_workers = 0
196200
if n_workers==0:
197201
yield from enumerate(list(cls(**kwargs)(items)))

nbs/03a_parallel.ipynb

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,14 @@
477477
"show_doc(ProcessPoolExecutor, title_level=4)"
478478
]
479479
},
480+
{
481+
"cell_type": "markdown",
482+
"id": "b1d7c809",
483+
"metadata": {},
484+
"source": [
485+
"We define `import_progress_bar` to lazily import, `fastprogress` depends on `fasthtml` and takes about 1 sec to load"
486+
]
487+
},
480488
{
481489
"cell_type": "code",
482490
"execution_count": null,
@@ -485,8 +493,10 @@
485493
"outputs": [],
486494
"source": [
487495
"#| export\n",
488-
"try: from fastprogress import progress_bar\n",
489-
"except: progress_bar = None"
496+
"def import_progress_bar():\n",
497+
" try: from fastprogress import progress_bar\n",
498+
" except ImportError: return None\n",
499+
" return progress_bar"
490500
]
491501
},
492502
{
@@ -500,6 +510,7 @@
500510
"def parallel(f, items, *args, n_workers=defaults.cpus, total=None, progress=None, pause=0,\n",
501511
" method=None, threadpool=False, timeout=None, chunksize=1, **kwargs):\n",
502512
" \"Applies `func` in parallel to `items`, using `n_workers`\"\n",
513+
" progress_bar = import_progress_bar()\n",
503514
" kwpool = {}\n",
504515
" if threadpool: pool = ThreadPoolExecutor\n",
505516
" else:\n",
@@ -990,9 +1001,10 @@
9901001
"metadata": {},
9911002
"outputs": [],
9921003
"source": [
993-
"#| export \n",
1004+
"#| export\n",
9941005
"def parallel_gen(cls, items, n_workers=defaults.cpus, progress=True, **kwargs):\n",
9951006
" \"Instantiate `cls` in `n_workers` procs & call each on a subset of `items` in parallel.\"\n",
1007+
" progress_bar = import_progress_bar()\n",
9961008
" if not parallelable('n_workers', n_workers): n_workers = 0\n",
9971009
" if n_workers==0:\n",
9981010
" yield from enumerate(list(cls(**kwargs)(items)))\n",

0 commit comments

Comments
 (0)