15
15
Sequence ,
16
16
Tuple ,
17
17
)
18
+ from tqdm import tqdm
18
19
19
20
import aiohttp
20
21
import click
@@ -599,10 +600,45 @@ async def _run(session, idx, name, envs,
599
600
except Exception as e :
600
601
print_fail ('[{0}] {1}' .format (idx , e ))
601
602
return
603
+
604
+ async def display_kernel_pulling (compute_session : AsyncSession .ComputeSession ) -> bool :
605
+ try :
606
+ bgtask = compute_session .backgroundtask
607
+ except Exception as e :
608
+ print_error (e )
609
+ return False
610
+ else :
611
+ with tqdm (total = 100 , unit = '%' ) as pbar :
612
+ async with bgtask .listen_events () as response :
613
+ async for ev in response :
614
+ progress = json .loads (ev .data )
615
+ if ev .event == 'bgtask_updated' :
616
+ current = progress ['current_progress' ]
617
+ total = progress ['total_progress' ]
618
+ if total == 0 :
619
+ pbar .n = 0
620
+ else :
621
+ pbar .n = round (current / total * 100 , 2 )
622
+ pbar .update (0 )
623
+ pbar .refresh ()
624
+ elif ev .event == 'bgtask_done' :
625
+ pbar .n = 100
626
+ pbar .update (0 )
627
+ pbar .refresh ()
628
+ pbar .clear ()
629
+ compute_session = await session .ComputeSession .get_or_create (
630
+ image ,
631
+ name = name ,
632
+ )
633
+ await asyncio .sleep (0.1 )
634
+ return True
635
+
602
636
if compute_session .status == 'PENDING' :
603
637
print_info ('Session ID {0} is enqueued for scheduling.'
604
638
.format (name ))
605
- return
639
+ result = await display_kernel_pulling (compute_session )
640
+ if not result :
641
+ return
606
642
elif compute_session .status == 'SCHEDULED' :
607
643
print_info ('Session ID {0} is scheduled and about to be started.'
608
644
.format (name ))
@@ -623,7 +659,9 @@ async def _run(session, idx, name, envs,
623
659
elif compute_session .status == 'TIMEOUT' :
624
660
print_info ('Session ID {0} is still on the job queue.'
625
661
.format (name ))
626
- return
662
+ result = await display_kernel_pulling (compute_session )
663
+ if not result :
664
+ return
627
665
elif compute_session .status in ('ERROR' , 'CANCELLED' ):
628
666
print_fail ('Session ID {0} has an error during scheduling/startup or cancelled.'
629
667
.format (name ))
0 commit comments