Сейчас я реализую поток, который будет в основном действовать как потребитель. Будет очередь FIFO, которая будет заполнена другими потоками. Проблема в том, что я хочу добавить специальное условие, которое приведет к тому, что элемент полностью пропустит очередь.Проблемы с использованием очередей в python при получении объектов для пропуска очереди
def EventThread (threading.Thread):
def __init__ (self, counter_object):
super (EventThread, self).__init__()
self.queue = Queue.Queue()
self.priority = threading.Event()
self.item = None
self.counter = counter.object
def add_to_queue (self, item):
self.queue.put (item)
def do_priority (self, item)
self.item = item
self.priority.set()
# do something here to block until priority goes back
def run (self):
while True:
# Wait for open event slots
if not self.counter.has_slots():
time.sleep (self.counter.next_slot())
# Block until queue has something
item = self.queue.get (True)
# If priority is set we need to do that first
if self.priority.is_set():
do_something_special (self.item)
self.priority.clear()
else:
do_something (item)
# first if priority was set we lost the object
# second the thread blocks until the queue has an object, doesn't
# metter if priority has been set
Это всего лишь некоторый псевдокод, чтобы подробно рассказать о моей точке. Но, как вы видите, там есть большие проблемы. Не нужно беспокоиться о счетчике, только этот поток обращается к нему.
Что мне действительно нужно, так это то, чтобы получить поток до либо переключатели приоритета, либо очередь получает элемент. Я довольно новичок в многопоточности, поэтому я не знаю ни одного объекта, который бы соответствовал моим потребностям или любому трюку, чтобы снять это.
Большое спасибо всем, кто может помочь.
Это, кажется, часть того, что мне нужно, описание было довольно расплывчатым, поэтому я сначала просмотрел его. Но мне нужно, чтобы функция do_priority блокировалась, пока этот первый элемент не был выбран из списка. – msikora