Python

Откуда переменная инпат кью получает значения?

SZ
Sait Zakrit
66
от функции get наверное
Валерий Мусихин
Валерий Мусихин
406
Лучший ответ
По поводу такого вопроса тебе нужно прочитать страниц этак 30 текста (главу книги или пару-тройку статей) чисто для ознакомления.. Для того, чтобы все понять, страниц 100-200-300 точно.. в зависимости от "степени готовности" к такому материалу)).

Это фрагмент классической задачи на "многопоточность" (multithreading).
Загугли "Задача о поставщике и потребителе"
Так вот потребитель (англ. consumer) в данном фрагменте извлекает из очереди (англ. queue - такой контейнер есть) очередное задание (англ. task), обрабатывает его и затем сообщает об окончании обработки (и готовности к следующему заданию) объекту синхронизации (семафор скорее всего).
В другом месте кода должен быть еще и поставщик, который в эту очередь кладет эти самые задания по сигналу семафора..
И по идее, они должны работать в разных нитях процесса и синхронизироваться этим самым семафором (он на очереди стоит).
В общем, загугли за подробностями..

Ах да.. про очередь.. Есть LIFO и FIFO - "основные принципы" устройства контейнеров. LIFO - последним вошел, первым вышел (last in, first out) - это стек, а FIFO - первым вошел, первым вышел (first in, first out) - это как раз таки и есть очередь.
Она имеет размер. Т. е. сколько максимум заданий могут ожидать обработки потребителем. При полном заполнении очереди, поставщик, в свою очередь, должен ждать пока в очереди освободится место, а при опустошении - потребитель ждать новых задач. Кстати, поставщиков и потребителей не обязательно по одному.

Так вот!
input_q - это и есть та самая очередь заданий. Input queue (в контексте потребителя эта очередь - входящая) имеется в виду под именем переменной. И у данного контейнера есть метод get(), который извлекает первый или "нижний" элемент очереди.
Нариман Жанмурзин В питонах ты скорее всего не увидишь как это реализуется на низком уровне. Только если в исходниках на Си.
Все будет делаться на уровне корутин высокого уровня, в которых это все запрятано. Потому как питоны - слишком высокого уровня язык.

P.S.
Сам я питонов не знаю практически, потому только предполагаю.. Кто осведомлен, пусть поправит..
Это не важно. Важно то, что ты предполагаешь, что input_q умеет получать значения через get. И эта абстракция от реализации позволяет тебе работать с любыми объектами, которые умеют .get()
Женя Михайлов
Женя Михайлов
8 860
Это же функция - consumer(), которая принимает один аргумент - input_q. input_q получит значение, которое передать в функцию при ее вызове. Например:
consumer(255)
Теперь внутри функции input_q будет равен 255.
Потому что метод .get() возвращает значение и изменяет экземпляр, видимо. А вообще, изначально, input_q получает значение как аргумент функции