aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorAUTOMATIC <16777216c@gmail.com>2023-05-15 17:57:11 +0000
committerAUTOMATIC <16777216c@gmail.com>2023-05-15 17:57:11 +0000
commit0d2a4b608c075daa3a4d1a1c9df01a763ae4793a (patch)
tree25488d35aad44d0b99b9e5be18291e8ea71efe51 /modules
parent0d3a80e2692fb72da9798367b882f45312202f2e (diff)
downloadstable-diffusion-webui-gfx803-0d2a4b608c075daa3a4d1a1c9df01a763ae4793a.tar.gz
stable-diffusion-webui-gfx803-0d2a4b608c075daa3a4d1a1c9df01a763ae4793a.tar.bz2
stable-diffusion-webui-gfx803-0d2a4b608c075daa3a4d1a1c9df01a763ae4793a.zip
load extensions' git metadata in parallel to loading the main program to save a ton of time during startup
Diffstat (limited to 'modules')
-rw-r--r--modules/config_states.py2
-rw-r--r--modules/extensions.py12
-rw-r--r--modules/ui_extensions.py15
3 files changed, 26 insertions, 3 deletions
diff --git a/modules/config_states.py b/modules/config_states.py
index 75da862a..db65bcdb 100644
--- a/modules/config_states.py
+++ b/modules/config_states.py
@@ -83,6 +83,8 @@ def get_extension_config():
ext_config = {}
for ext in extensions.extensions:
+ ext.read_info_from_repo()
+
entry = {
"name": ext.name,
"path": ext.path,
diff --git a/modules/extensions.py b/modules/extensions.py
index bc2c0450..1053253e 100644
--- a/modules/extensions.py
+++ b/modules/extensions.py
@@ -1,5 +1,6 @@
import os
import sys
+import threading
import traceback
import time
@@ -24,6 +25,8 @@ def active():
class Extension:
+ lock = threading.Lock()
+
def __init__(self, name, path, enabled=True, is_builtin=False):
self.name = name
self.path = path
@@ -42,8 +45,13 @@ class Extension:
if self.is_builtin or self.have_info_from_repo:
return
- self.have_info_from_repo = True
+ with self.lock:
+ if self.have_info_from_repo:
+ return
+ self.do_read_info_from_repo()
+
+ def do_read_info_from_repo(self):
repo = None
try:
if os.path.exists(os.path.join(self.path, ".git")):
@@ -70,6 +78,8 @@ class Extension:
print(f"Failed reading extension data from Git repository ({self.name}): {ex}", file=sys.stderr)
self.remote = None
+ self.have_info_from_repo = True
+
def list_files(self, subdir, extension):
from modules import scripts
diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py
index af497733..aaa7e571 100644
--- a/modules/ui_extensions.py
+++ b/modules/ui_extensions.py
@@ -1,6 +1,7 @@
import json
import os.path
import sys
+import threading
import time
from datetime import datetime
import traceback
@@ -484,11 +485,18 @@ def refresh_available_extensions_from_data(hide_tags, sort_column, filter_text="
return code, list(tags)
+def preload_extensions_git_metadata():
+ for extension in extensions.extensions:
+ extension.read_info_from_repo()
+
+
def create_ui():
import modules.ui
config_states.list_config_states()
+ threading.Thread(target=preload_extensions_git_metadata).start()
+
with gr.Blocks(analytics_enabled=False) as ui:
with gr.Tabs(elem_id="tabs_extensions"):
with gr.TabItem("Installed", id="installed"):
@@ -508,7 +516,8 @@ def create_ui():
</span>
"""
info = gr.HTML(html)
- extensions_table = gr.HTML(lambda: extension_table())
+ extensions_table = gr.HTML('Loading...')
+ ui.load(fn=extension_table, inputs=[], outputs=[extensions_table])
apply.click(
fn=apply_and_restart,
@@ -595,7 +604,8 @@ def create_ui():
config_save_button = gr.Button(value="Save Current Config")
config_states_info = gr.HTML("")
- config_states_table = gr.HTML(lambda: update_config_states_table("Current"))
+ config_states_table = gr.HTML("Loading...")
+ ui.load(fn=update_config_states_table, inputs=[config_states_list], outputs=[config_states_table])
config_save_button.click(fn=save_config_state, inputs=[config_save_name], outputs=[config_states_list, config_states_info])
@@ -608,4 +618,5 @@ def create_ui():
outputs=[config_states_table],
)
+
return ui