Raymond Weitekamp commited on
Commit
bb32d19
·
1 Parent(s): a0f24f5

Add improved race condition handling with wait_for_viewer_ready function

Browse files
Files changed (1) hide show
  1. cadviewer.py +18 -6
cadviewer.py CHANGED
@@ -102,19 +102,31 @@ def check_viewer_ready():
102
  except:
103
  return False
104
 
 
 
 
 
 
 
 
 
 
 
 
105
  def button_run_callback():
106
  try:
107
  if not viewer_initialized:
108
  logger.warning("Viewer not initialized yet, please wait...")
109
  return
110
-
111
- # Add a check for viewer readiness
112
- if not check_viewer_ready():
113
- logger.warning("Viewer not ready yet, please wait a moment and try again...")
114
  return
115
 
116
- # Add a delay to ensure WebSocket connection is established
117
- time.sleep(1) # Increased delay for WebSocket setup
 
118
 
119
  logger.info("Executing user code")
120
  # Create a clean namespace for execution
 
102
  except:
103
  return False
104
 
105
+ def wait_for_viewer_ready(timeout=10):
106
+ """Wait until the viewer HTTP exists and return True if ready within the timeout."""
107
+ start = time.time()
108
+ while time.time() - start < timeout:
109
+ if check_viewer_ready():
110
+ logger.info("Viewer HTTP endpoint is up.")
111
+ return True
112
+ logger.info("Waiting for viewer readiness...")
113
+ time.sleep(0.5)
114
+ return False
115
+
116
  def button_run_callback():
117
  try:
118
  if not viewer_initialized:
119
  logger.warning("Viewer not initialized yet, please wait...")
120
  return
121
+
122
+ # Wait for viewer readiness with a timeout.
123
+ if not wait_for_viewer_ready(timeout=10):
124
+ logger.warning("Viewer not ready yet after waiting, please try again later...")
125
  return
126
 
127
+ # Additional delay to ensure that the websocket connection is established.
128
+ logger.info("Viewer HTTP ready, waiting extra 2 seconds for websocket connection...")
129
+ time.sleep(2) # Increased delay for WebSocket setup
130
 
131
  logger.info("Executing user code")
132
  # Create a clean namespace for execution