Как отметили два человека, которые прокомментировали ваш вопрос, немедленным ответом было бы использование потоков, лишь бы вы упомянули, что будет много экземпляров, а множество экземпляров - разумная сумма.Что-то вроде следующего:
import threading
import Queue
import time
class QueuePrinter(threading.Thread):
def __init__(self, qu, *args, **kwargs):
super(QueuePrinter, self).__init__(*args, **kwargs)
self.qu = qu
def run(self):
while not self.qu.empty():
item = self.qu.get()
print item
time.sleep(2)
qu = Queue()
printer = QueuePrinter(qu)
qu.put('String1')
qu.put('String2')
#etc...
printer.start()
qu.join()
Вы захотите немного улучшить это;но это основы того, что вы должны придерживаться.В частности, вы захотите изменить метод run (), чтобы он работал правильно, а метод get () вызывался в очереди, находящейся там, потому что Queue.get является блокирующим вызовом и будет ждать, пока он не сможет получить элемент.
Предоставление self.qu.get (timeout = 100) вызовет исключение, но это означает, что поток не будет зависать до конца времени, если очередь очищается между self.qu.empty () ифактическая загрузка элемента из очереди.