1515 Sequence ,
1616 Tuple ,
1717)
18+ from tqdm import tqdm
1819import uuid
1920
2021import aiohttp
@@ -602,10 +603,45 @@ async def _run(session, idx, name, envs,
602603 except Exception as e :
603604 print_fail ('[{0}] {1}' .format (idx , e ))
604605 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+
605639 if compute_session .status == 'PENDING' :
606640 print_info ('Session ID {0} is enqueued for scheduling.'
607641 .format (name ))
608- return
642+ result = await display_kernel_pulling (compute_session )
643+ if not result :
644+ return
609645 elif compute_session .status == 'SCHEDULED' :
610646 print_info ('Session ID {0} is scheduled and about to be started.'
611647 .format (name ))
@@ -626,12 +662,13 @@ async def _run(session, idx, name, envs,
626662 elif compute_session .status == 'TIMEOUT' :
627663 print_info ('Session ID {0} is still on the job queue.'
628664 .format (name ))
629- return
665+ result = await display_kernel_pulling (compute_session )
666+ if not result :
667+ return
630668 elif compute_session .status in ('ERROR' , 'CANCELLED' ):
631669 print_fail ('Session ID {0} has an error during scheduling/startup or cancelled.'
632670 .format (name ))
633671 return
634-
635672 if not is_multi :
636673 stdout = sys .stdout
637674 stderr = sys .stderr
0 commit comments