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