Spaces:
Sleeping
Sleeping
Raymond Weitekamp
commited on
Commit
·
bb32d19
1
Parent(s):
a0f24f5
Add improved race condition handling with wait_for_viewer_ready function
Browse files- 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 |
-
#
|
| 112 |
-
if not
|
| 113 |
-
logger.warning("Viewer not ready yet, please
|
| 114 |
return
|
| 115 |
|
| 116 |
-
#
|
| 117 |
-
|
|
|
|
| 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
|