La bonne façon de limiter au maximum le nombre de threads en cours d'exécution à la fois?

J'aimerais créer un programme qui s'exécute de multiples threads, mais il se limite à une constante, le nombre prédéfini de l'exécution de tâches simultanées, comme ceci (mais sans risque de race condition):

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()

Ce qui est le plus sûr/le moyen le plus rapide pour mettre en œuvre cette?

  • Il semble que vous décrivez un pool de threads.
  • Ne pool de threads implique de stocker les références des fils? J'aimerais le garder aussi léger que possible.
  • docs.python.org/2/library/...
  • Juste édité la question - qui a remplacé le "CPU" à la "lumière", comme il convient à mon problème plus précisément.
  • Il n'importe pas vraiment si une référence à la thread est stocké ou pas, n'est ce pas? Huit références de l'objet ne sont pas va faire ou défaire votre programme.
  • J'ai eu la pensée que de les remplacer rapidement pourrait causer une grosse perte de performance.
  • BTW, j'ai mis à jour le code pour montrer que j'ai besoin de garder en tirant le fil des arguments.
  • Le remplacement d'un objet de référence, par rapport à la surcharge de commencer un nouveau thread, est extrêmement rapide. Avez-vous fait des points de référence, ou vous êtes tout simplement en essayant de deviner ce qui est "lumière" et ce qui ne l'est pas?
  • doublon potentiel de stackoverflow.com/questions/1787397/...

InformationsquelleAutor d33tah | 2013-10-14