Właściwy sposób na ograniczenie maksymalnej liczby wątków uruchomionych jednocześnie?

Chciałbym utworzyć program, który uruchamia wiele wątków lekkich, ale ogranicza się do stałej, predefiniowanej liczby współbieżnych uruchomionych zadań, takich jak ten (ale bez ryzyka wystąpienia wyścigu):

import threading

def f(arg):
    global running
    running += 1
    print("Spawned a thread. running=%s, arg=%s" % (running, arg))
    for i in range(100000):
        pass
    running -= 1
    print("Done")

running = 0
while True:
    if running < 8:
        arg = get_task()
        threading.Thread(target=f, args=[arg]).start()

Jaki jest najbezpieczniejszy / najszybszy sposób wdrożenia?

questionAnswers(6)

yourAnswerToTheQuestion