diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-05-17 15:45:40 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-17 15:45:40 +0000 |
commit | f6c06e3ed2fc861e98b2f0e93e0b1fef0ef6e0cf (patch) | |
tree | 18e6e6f802b6669925814f4c9b76f1896e66abbe /modules/shared.py | |
parent | 216b0fa6c904a4803a74e9af9b335142ae980dd1 (diff) | |
parent | 875990a23213c63c19b8fdd3c87345f7a8ea2ceb (diff) | |
download | stable-diffusion-webui-gfx803-f6c06e3ed2fc861e98b2f0e93e0b1fef0ef6e0cf.tar.gz stable-diffusion-webui-gfx803-f6c06e3ed2fc861e98b2f0e93e0b1fef0ef6e0cf.tar.bz2 stable-diffusion-webui-gfx803-f6c06e3ed2fc861e98b2f0e93e0b1fef0ef6e0cf.zip |
Merge pull request #10458 from akx/graceful-stop
Graceful server stopping
Diffstat (limited to 'modules/shared.py')
-rw-r--r-- | modules/shared.py | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/modules/shared.py b/modules/shared.py index 165509ea..47bc6d0e 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -2,6 +2,7 @@ import datetime import json
import os
import sys
+import threading
import time
import gradio as gr
@@ -110,8 +111,47 @@ class State: id_live_preview = 0
textinfo = None
time_start = None
- need_restart = False
server_start = None
+ _server_command_signal = threading.Event()
+ _server_command: str | None = None
+
+ @property
+ def need_restart(self) -> bool:
+ # Compatibility getter for need_restart.
+ return self.server_command == "restart"
+
+ @need_restart.setter
+ def need_restart(self, value: bool) -> None:
+ # Compatibility setter for need_restart.
+ if value:
+ self.server_command = "restart"
+
+ @property
+ def server_command(self):
+ return self._server_command
+
+ @server_command.setter
+ def server_command(self, value: str | None) -> None:
+ """
+ Set the server command to `value` and signal that it's been set.
+ """
+ self._server_command = value
+ self._server_command_signal.set()
+
+ def wait_for_server_command(self, timeout: float | None = None) -> str | None:
+ """
+ Wait for server command to get set; return and clear the value and signal.
+ """
+ if self._server_command_signal.wait(timeout):
+ self._server_command_signal.clear()
+ req = self._server_command
+ self._server_command = None
+ return req
+ return None
+
+ def request_restart(self) -> None:
+ self.interrupt()
+ self.server_command = True
def skip(self):
self.skipped = True
|