В программе на Python мне нужны 2 потока, основанные на модуле Threading.Поток № 1 генерирует некоторые данные и помещает их в буфер, а поток № 2 должен обрабатывать данные в буфере.
Итак, мой псевдокод выглядит так: Поток 1:
Thread#1
while True:
Generate_Some_Data()
while flag==1:
pass()
Buffer_Address=Write_It_To_Buffer()
flag=1
Thread#2
while True:
while flag==0:
pass()
Process_Data(Buffer_Address)
flag=0
(Предположим, что доступ к переменной «flag» распределяется с помощью подходящих блокировок.)
Я знаю, что модуль Threading не является параллельным.По сути, это означает, что, если один из потоков не блокирует какие-либо внешние условия (например, file-io или time.sleep), оба потока будут совместно использовать общее время процесса независимо от задач.Поэтому, насколько я понимаю, примерно половина общего времени обработки будет потрачена на циклы «while» в указанной выше конфигурации.
Итак, вот мои вопросы:
Прав ли я в своем ожидании / понимании модуля Threading?Половина общего времени процесса потрачена впустую в циклах "флаг"?
(если я прав) Есть ли способ полностью избавиться от циклов "флаг"?Я попытался найти другую структуру, в которой я могу заставить потоки спать в методах lock.acquire (), однако я не смог найти безопасный способ сделать это на 100%.(Когда один поток передает блокировку, нет гарантии, что другой поток получит его до того, как тот же поток получит его снова)