mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2025-05-06 20:09:06 +08:00
Merge d267aaa519397c635a2bddc989ba8c929a77cc35 into 2174ce5afea90ca489d222f539988dcef59f1027
This commit is contained in:
commit
bcf442a967
@ -31,6 +31,7 @@ parser.add_argument("--no-half", action='store_true', help="do not switch the mo
|
|||||||
parser.add_argument("--no-half-vae", action='store_true', help="do not switch the VAE model to 16-bit floats")
|
parser.add_argument("--no-half-vae", action='store_true', help="do not switch the VAE model to 16-bit floats")
|
||||||
parser.add_argument("--no-progressbar-hiding", action='store_true', help="do not hide progressbar in gradio UI (we hide it because it slows down ML if you have hardware acceleration in browser)")
|
parser.add_argument("--no-progressbar-hiding", action='store_true', help="do not hide progressbar in gradio UI (we hide it because it slows down ML if you have hardware acceleration in browser)")
|
||||||
parser.add_argument("--max-batch-count", type=int, default=16, help="does not do anything")
|
parser.add_argument("--max-batch-count", type=int, default=16, help="does not do anything")
|
||||||
|
parser.add_argument("--max-install-thread", type=int, default=1, help="Maximum Thread number for for asynchronously install extensions. 1 = normal install. ⚠ Enabling this feature may cause unintended issues with some extensions."),
|
||||||
parser.add_argument("--embeddings-dir", type=normalized_filepath, default=os.path.join(data_path, 'embeddings'), help="embeddings directory for textual inversion (default: embeddings)")
|
parser.add_argument("--embeddings-dir", type=normalized_filepath, default=os.path.join(data_path, 'embeddings'), help="embeddings directory for textual inversion (default: embeddings)")
|
||||||
parser.add_argument("--textual-inversion-templates-dir", type=normalized_filepath, default=os.path.join(script_path, 'textual_inversion_templates'), help="directory with textual inversion templates")
|
parser.add_argument("--textual-inversion-templates-dir", type=normalized_filepath, default=os.path.join(script_path, 'textual_inversion_templates'), help="directory with textual inversion templates")
|
||||||
parser.add_argument("--hypernetwork-dir", type=normalized_filepath, default=os.path.join(models_path, 'hypernetworks'), help="hypernetwork directory")
|
parser.add_argument("--hypernetwork-dir", type=normalized_filepath, default=os.path.join(models_path, 'hypernetworks'), help="hypernetwork directory")
|
||||||
|
@ -12,6 +12,7 @@ import json
|
|||||||
import shlex
|
import shlex
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
|
|
||||||
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||||
from modules import cmd_args, errors
|
from modules import cmd_args, errors
|
||||||
from modules.paths_internal import script_path, extensions_dir
|
from modules.paths_internal import script_path, extensions_dir
|
||||||
from modules.timer import startup_timer
|
from modules.timer import startup_timer
|
||||||
@ -226,7 +227,10 @@ def version_check(commit):
|
|||||||
def run_extension_installer(extension_dir):
|
def run_extension_installer(extension_dir):
|
||||||
path_installer = os.path.join(extension_dir, "install.py")
|
path_installer = os.path.join(extension_dir, "install.py")
|
||||||
if not os.path.isfile(path_installer):
|
if not os.path.isfile(path_installer):
|
||||||
return
|
return False
|
||||||
|
|
||||||
|
dirname = os.path.basename(extension_dir)
|
||||||
|
logging.debug(f"Installing {dirname}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
@ -238,6 +242,8 @@ def run_extension_installer(extension_dir):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.report(str(e))
|
errors.report(str(e))
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def list_extensions(settings_file):
|
def list_extensions(settings_file):
|
||||||
settings = {}
|
settings = {}
|
||||||
@ -265,14 +271,26 @@ def run_extensions_installers(settings_file):
|
|||||||
return
|
return
|
||||||
|
|
||||||
with startup_timer.subcategory("run extensions installers"):
|
with startup_timer.subcategory("run extensions installers"):
|
||||||
|
paths = {}
|
||||||
for dirname_extension in list_extensions(settings_file):
|
for dirname_extension in list_extensions(settings_file):
|
||||||
logging.debug(f"Installing {dirname_extension}")
|
|
||||||
|
|
||||||
path = os.path.join(extensions_dir, dirname_extension)
|
path = os.path.join(extensions_dir, dirname_extension)
|
||||||
|
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
|
paths[dirname_extension] = path
|
||||||
|
|
||||||
|
max_workers = args.max_install_thread
|
||||||
|
if max_workers == 1:
|
||||||
|
for dirname_extension, path in paths.items():
|
||||||
run_extension_installer(path)
|
run_extension_installer(path)
|
||||||
startup_timer.record(dirname_extension)
|
startup_timer.record(dirname_extension)
|
||||||
|
else:
|
||||||
|
max_workers = min(max_workers, 4)
|
||||||
|
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
||||||
|
futures = {executor.submit(run_extension_installer, path): dirname_extension for dirname_extension, path in paths.items()}
|
||||||
|
for future in as_completed(futures):
|
||||||
|
dirname_extension = futures[future]
|
||||||
|
if future.result():
|
||||||
|
startup_timer.record(dirname_extension)
|
||||||
|
|
||||||
|
|
||||||
re_requirement = re.compile(r"\s*([-_a-zA-Z0-9]+)\s*(?:==\s*([-+_.a-zA-Z0-9]+))?\s*")
|
re_requirement = re.compile(r"\s*([-_a-zA-Z0-9]+)\s*(?:==\s*([-+_.a-zA-Z0-9]+))?\s*")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user