J'ai cherché partout et je ne trouve aucun exemple simple d'itération d'une boucle avec multithreading.
Par exemple, comment puis-je multithreader cette boucle?
for item in range(0, 1000):
print item
Existe-t-il un moyen de le couper comme 4 fils, de sorte que chaque fil a 250 itérations?
Le moyen le plus simple est avec multiprocessing.dummy (qui utilise des threads au lieu des processus) et un Pool
import multiprocessing.dummy as mp
def do_print(s):
print s
if __name__=="__main__":
p=mp.Pool(4)
p.map(do_print,range(0,10)) # range(0,1000) if you want to replicate your example
p.close()
p.join()
Peut-être que vous voulez essayer de vrais multitraitements, si vous voulez mieux utiliser plusieurs processeurs, mais il y a plusieurs mises en garde et directives à suivre alors.
Peut-être que d'autres méthodes de Pool
conviendraient mieux à vos besoins - selon ce que vous essayez réellement de faire.
Vous devrez effectuer le fractionnement manuellement:
import threading
def ThFun(start, stop):
for item in range(start, stop):
print item
for n in range(0, 1000, 100):
stop = n + 100 if n + 100 <= 1000 else 1000
threading.Thread(target = ThFun, args = (n, stop)).start()
Ce code utilise le multithreading , ce qui signifie que tout sera exécuté dans un seul processus Python (c'est-à-dire qu'un seul interprète Python le fera). être lancé).
Le multitraitement , discuté dans l'autre réponse, signifie l'exécution de code dans plusieurs interprètes Python (dans plusieurs processus , pas threads ) . Cela peut utiliser tous les cœurs de processeur disponibles, c'est donc utile lorsque vous vous concentrez sur la vitesse de votre code ( imprimez une tonne de chiffres jusqu'à ce que le terminal vous déteste! ), pas simplement sur le traitement parallèle. 1
1. multiprocessing.dummy
Se révèle être n wrapper autour du module threading
. multiprocessing
et multiprocessing.dummy
ont la même interface, mais le premier module effectue un traitement parallèle en utilisant processus , tandis que le dernier - en utilisant threads .