Re: Multithreading: как очередь, но вручную и красиво?
От: · Великобритания  
Дата: 26.01.26 14:14
Оценка:
Здравствуйте, netch80, Вы писали:

N>Периодически возникает при многонитевом построении примерно следующий "паттерн": есть элемент состояния/управления (как очередь заданий), который требует контролируемого взаимодействия с помощью лока и "условной переменной". Но чтобы на время выполнения задания не блокировать тех, кто хочет установить следующее задание, лок снимается на это время. Получается следующая схема:

Перечитал код внимательнее. У тебя же тут шиворот-навыворот. Ты не должен держать лок когда не надо. А должен захватывать когда надо:

while True:
    ## лочим
    with self.lock:
        while not self.task: ## не надо "if" тут, google: Spurious wakeup
            self.cv.sleep()  ## а вот это я что-то не понял. Зачем sleep??! или это await имеется в виду?
        task = self.task
        self.task = None
    ## всё, больше локи не нужны
    try:
        self.execute(task)
    except Exception:
        ... пожаловались ...
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 26.01.2026 14:33 · . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.