import sys
import time
import Queue
import threading
import random
MAX_THREADS = 5
def start_thread(*args, **kwargs):
t = threading.Thread(*args, **kwargs)
t.daemon = True
t.start()
return t
def dumb_print(q):
line = q.get()
time.sleep(random.randint(1, 10))
sys.stdout.write(line)
q.task_done()
def main_loop():
q = Queue.Queue(MAX_THREADS)
with open('strings.txt', 'r') as f:
data = f.readlines()
for line in data:
q.put(line)
start_thread(target=dumb_print, args=(q,))
q.join()
if __name__ == '__main__':
sys.stdout.write('start\n')
loop = start_thread(target=main_loop)
while loop.is_alive():
sys.stdout.write('still alive\n')
time.sleep(random.randint(1, 5))
sys.stdout.write('done\n')
Советую почитать документацию по
Queue
p.s. как уже было упомянуто: если у вас вычисления на процессоре, а не IO, то лучше посмотреть в сторону модуля
multiprocessing, благо что API почти не отличается.