add locks to ensure init args are thread-safe

This commit is contained in:
lanyeeee 2023-12-30 21:32:22 +08:00
parent 00d4a4d4ac
commit c069c2c562
1 changed files with 16 additions and 8 deletions

View File

@ -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