stable-diffusion-webui

Форк
0
37 строк · 1020.0 Байт
1
import threading
2
import collections
3

4

5
# reference: https://gist.github.com/vitaliyp/6d54dd76ca2c3cdfc1149d33007dc34a
6
class FIFOLock(object):
7
    def __init__(self):
8
        self._lock = threading.Lock()
9
        self._inner_lock = threading.Lock()
10
        self._pending_threads = collections.deque()
11

12
    def acquire(self, blocking=True):
13
        with self._inner_lock:
14
            lock_acquired = self._lock.acquire(False)
15
            if lock_acquired:
16
                return True
17
            elif not blocking:
18
                return False
19

20
            release_event = threading.Event()
21
            self._pending_threads.append(release_event)
22

23
        release_event.wait()
24
        return self._lock.acquire()
25

26
    def release(self):
27
        with self._inner_lock:
28
            if self._pending_threads:
29
                release_event = self._pending_threads.popleft()
30
                release_event.set()
31

32
            self._lock.release()
33

34
    __enter__ = acquire
35

36
    def __exit__(self, t, v, tb):
37
        self.release()
38

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.