aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlanyeeee <1210347077@qq.com>2023-12-30 21:32:22 +0800
committerlanyeeee <1210347077@qq.com>2023-12-30 21:32:22 +0800
commitc069c2c5628728c9506dd034ef98e6335fd5bb34 (patch)
treece6a945d481e37905250f27f4fc7cf1ad8e6f691
parent00d4a4d4ac75903d8224e9beb1136584dd66fcd8 (diff)
add locks to ensure init args are thread-safe
-rw-r--r--modules/api/api.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/modules/api/api.py b/modules/api/api.py
index f0a68c67..45c5c507 100644
--- a/modules/api/api.py
+++ b/modules/api/api.py
@@ -251,14 +251,10 @@ class Api:
self.default_script_arg_txt2img = []
self.default_script_arg_img2img = []
- script_runner = scripts.scripts_img2img
- if not script_runner.scripts:
- script_runner.initialize_scripts(True)
- ui.create_ui()
- if not self.default_script_arg_txt2img:
- self.default_script_arg_txt2img = self.init_default_script_args(script_runner)
- if not self.default_script_arg_img2img:
- self.default_script_arg_img2img = self.init_default_script_args(script_runner)
+ self.txt2img_script_arg_init_lock = Lock()
+ self.img2img_script_arg_init_lock = Lock()
+
+
def add_api_route(self, path: str, endpoint, **kwargs):
if shared.cmd_opts.api_auth:
@@ -348,6 +344,12 @@ class Api:
task_id = txt2imgreq.force_task_id or create_task_id("txt2img")
script_runner = scripts.scripts_txt2img
+ with self.txt2img_script_arg_init_lock:
+ if not script_runner.scripts:
+ script_runner.initialize_scripts(False)
+ ui.create_ui()
+ if not self.default_script_arg_txt2img:
+ self.default_script_arg_txt2img = self.init_default_script_args(script_runner)
selectable_scripts, selectable_script_idx = self.get_selectable_script(txt2imgreq.script_name, script_runner)
populate = txt2imgreq.copy(update={ # Override __init__ params
@@ -407,6 +409,12 @@ class Api:
mask = decode_base64_to_image(mask)
script_runner = scripts.scripts_img2img
+ with self.img2img_script_arg_init_lock:
+ if not script_runner.scripts:
+ script_runner.initialize_scripts(True)
+ ui.create_ui()
+ if not self.default_script_arg_img2img:
+ self.default_script_arg_img2img = self.init_default_script_args(script_runner)
selectable_scripts, selectable_script_idx = self.get_selectable_script(img2imgreq.script_name, script_runner)
populate = img2imgreq.copy(update={ # Override __init__ params