213 votes

Quelles sont les différences entre les modules threading et multiprocessing ?

J'apprends à utiliser le threading et le multiprocessing en Python pour exécuter certaines opérations en parallèle et accélérer mon code.

J'ai du mal (peut-être parce que je n'ai aucun bagage théorique à ce sujet) à comprendre quelle est la différence entre une threading.Thread() et un objet multiprocessing.Process() un.

De même, je ne vois pas très bien comment instancier une file d'attente de travaux et faire en sorte que seuls 4 (par exemple) d'entre eux s'exécutent en parallèle, tandis que les autres attendent que les ressources se libèrent avant d'être exécutés.

Je trouve les exemples de la documentation clairs, mais pas très exhaustifs ; dès que j'essaie de compliquer un peu les choses, je reçois beaucoup d'erreurs bizarres (comme une méthode qui ne peut pas être décapée, etc.).

Alors, quand dois-je utiliser le threading y multiprocessing des modules ?

Pouvez-vous m'indiquer des ressources qui expliquent les concepts derrière ces deux modules et comment les utiliser correctement pour des tâches complexes ?

-5voto

innosam Points 305

Eh bien, Giulio Franco a répondu à la plupart des questions. Je vais développer davantage le problème du consommateur-producteur, ce qui, je suppose, vous mettra sur la bonne voie pour votre solution d'utilisation d'une application multithread.

fill_count = Semaphore(0) # items produced
empty_count = Semaphore(BUFFER_SIZE) # remaining space
buffer = Buffer()

def producer(fill_count, empty_count, buffer):
    while True:
        item = produceItem()
        empty_count.down();
        buffer.push(item)
        fill_count.up()

def consumer(fill_count, empty_count, buffer):
    while True:
        fill_count.down()
        item = buffer.pop()
        empty_count.up()
        consume_item(item)

Vous pouvez en savoir plus sur les primitives de synchronisation à partir de :

 http://linux.die.net/man/7/sem_overview
 http://docs.python.org/2/library/threading.html

Le pseudo-code est ci-dessus. Je suppose que vous devriez rechercher le problème producteur-consommateur pour obtenir plus de références.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X