fix(updates): make updates async to avoid blocking execution
I tracked the time and takes ~200ms everytime that we send the "Executing <NODE NAME> n%". So this means that if you have 10 custom nodes we are adding 2 extra seconds to the execution. 200 * 10 = 2,000. Some workflows are more complext and have more custom nodes, so this only keeps increasing.
This commit is contained in:
		
							parent
							
								
									ac843527d9
								
							
						
					
					
						commit
						ef50de41e5
					
				@ -1280,7 +1280,7 @@ async def send_json_override(self, event, data, sid=None):
 | 
				
			|||||||
        if prompt_id in prompt_metadata:
 | 
					        if prompt_id in prompt_metadata:
 | 
				
			||||||
            prompt_metadata[prompt_id].start_time = time.perf_counter()
 | 
					            prompt_metadata[prompt_id].start_time = time.perf_counter()
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
        await update_run(prompt_id, Status.RUNNING)
 | 
					        asyncio.create_task(update_run(prompt_id, Status.RUNNING))
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    if event == "executing" and data and CURRENT_START_EXECUTION_DATA:
 | 
					    if event == "executing" and data and CURRENT_START_EXECUTION_DATA:
 | 
				
			||||||
@ -1320,10 +1320,10 @@ async def send_json_override(self, event, data, sid=None):
 | 
				
			|||||||
            ])
 | 
					            ])
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            prompt_id = data.get("prompt_id")
 | 
					            prompt_id = data.get("prompt_id")
 | 
				
			||||||
            await update_run_with_output(
 | 
					            asyncio.create_task(update_run_with_output(
 | 
				
			||||||
                prompt_id,
 | 
					                prompt_id,
 | 
				
			||||||
                node_execution_array,  # Send the array instead of the OrderedDict
 | 
					                node_execution_array,  # Send the array instead of the OrderedDict
 | 
				
			||||||
            )
 | 
					            ))
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            print(node_execution_array)
 | 
					            print(node_execution_array)
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -1342,11 +1342,11 @@ async def send_json_override(self, event, data, sid=None):
 | 
				
			|||||||
                if prompt_metadata[prompt_id].start_time is not None:
 | 
					                if prompt_metadata[prompt_id].start_time is not None:
 | 
				
			||||||
                    elapsed_time = current_time - prompt_metadata[prompt_id].start_time
 | 
					                    elapsed_time = current_time - prompt_metadata[prompt_id].start_time
 | 
				
			||||||
                    logger.info(f"Elapsed time: {elapsed_time} seconds")
 | 
					                    logger.info(f"Elapsed time: {elapsed_time} seconds")
 | 
				
			||||||
                    await send(
 | 
					                    asyncio.create_task(send(
 | 
				
			||||||
                        "elapsed_time",
 | 
					                        "elapsed_time",
 | 
				
			||||||
                        {"prompt_id": prompt_id, "elapsed_time": elapsed_time},
 | 
					                        {"prompt_id": prompt_id, "elapsed_time": elapsed_time},
 | 
				
			||||||
                        sid=sid,
 | 
					                        sid=sid,
 | 
				
			||||||
                    )
 | 
					                    ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if event == "executing" and data.get("node") is not None:
 | 
					    if event == "executing" and data.get("node") is not None:
 | 
				
			||||||
        node = data.get("node")
 | 
					        node = data.get("node")
 | 
				
			||||||
@ -1370,7 +1370,7 @@ async def send_json_override(self, event, data, sid=None):
 | 
				
			|||||||
            prompt_metadata[prompt_id].last_updated_node = node
 | 
					            prompt_metadata[prompt_id].last_updated_node = node
 | 
				
			||||||
            class_type = prompt_metadata[prompt_id].workflow_api[node]["class_type"]
 | 
					            class_type = prompt_metadata[prompt_id].workflow_api[node]["class_type"]
 | 
				
			||||||
            logger.info(f"At: {round(calculated_progress * 100)}% - {class_type}")
 | 
					            logger.info(f"At: {round(calculated_progress * 100)}% - {class_type}")
 | 
				
			||||||
            await send(
 | 
					            asyncio.create_task(send(
 | 
				
			||||||
                "live_status",
 | 
					                "live_status",
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    "prompt_id": prompt_id,
 | 
					                    "prompt_id": prompt_id,
 | 
				
			||||||
@ -1378,10 +1378,10 @@ async def send_json_override(self, event, data, sid=None):
 | 
				
			|||||||
                    "progress": calculated_progress,
 | 
					                    "progress": calculated_progress,
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                sid=sid,
 | 
					                sid=sid,
 | 
				
			||||||
            )
 | 
					            ))
 | 
				
			||||||
            await update_run_live_status(
 | 
					            asyncio.create_task(update_run_live_status(
 | 
				
			||||||
                prompt_id, "Executing " + class_type, calculated_progress
 | 
					                prompt_id, "Executing " + class_type, calculated_progress
 | 
				
			||||||
            )
 | 
					            ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if event == "execution_cached" and data.get("nodes") is not None:
 | 
					    if event == "execution_cached" and data.get("nodes") is not None:
 | 
				
			||||||
        if prompt_id in prompt_metadata:
 | 
					        if prompt_id in prompt_metadata:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user