| import threading | |
| from contextlib import nullcontext | |
| from typing import ContextManager, Union | |
| from facefusion.execution import has_execution_provider | |
| THREAD_LOCK : threading.Lock = threading.Lock() | |
| THREAD_SEMAPHORE : threading.Semaphore = threading.Semaphore() | |
| NULL_CONTEXT : ContextManager[None] = nullcontext() | |
| def thread_lock() -> threading.Lock: | |
| return THREAD_LOCK | |
| def thread_semaphore() -> threading.Semaphore: | |
| return THREAD_SEMAPHORE | |
| def conditional_thread_semaphore() -> Union[threading.Semaphore, ContextManager[None]]: | |
| if has_execution_provider('directml') or has_execution_provider('rocm'): | |
| return THREAD_SEMAPHORE | |
| return NULL_CONTEXT | |