J'ai le code ci-dessous:Python multithreading vs multitraitement vs exécution séquentielle
import time
from threading import Thread
from multiprocessing import Process
def fun1():
for _ in xrange(10000000):
print 'in fun1'
pass
def fun2():
for _ in xrange(10000000):
print 'in fun2'
pass
def fun3():
for _ in xrange(10000000):
print 'in fun3'
pass
def fun4():
for _ in xrange(10000000):
print 'in fun4'
pass
if __name__ == '__main__':
#t1 = Thread(target=fun1, args=())
t1 = Process(target=fun1, args=())
#t2 = Thread(target=fun2, args=())
t2 = Process(target=fun2, args=())
#t3 = Thread(target=fun3, args=())
t3 = Process(target=fun3, args=())
#t4 = Thread(target=fun4, args=())
t4 = Process(target=fun4, args=())
t1.start()
t2.start()
t3.start()
t4.start()
start = time.clock()
t1.join()
t2.join()
t3.join()
t4.join()
end = time.clock()
print("Time Taken = ",end-start)
'''
start = time.clock()
fun1()
fun2()
fun3()
fun4()
end = time.clock()
print("Time Taken = ",end-start)
'''
Je courais le programme ci-dessus de trois façons:
- Première exécution séquentielle ALONE (regardez le code commenté et commentaire le code supérieur)
- Deuxième exécution multithread ALONE
- Troisième exécution multitraitement ALONE
Les observations pour le temps end_time démarrage sont les suivantes:
temps de course global
- ('Taken = Temps', 342,5981313667716) --- Durée par exécution filetée
- ('Time Taken =', 232.94691744899296) --- Durée de fonctionnement Exécution séquentielle
- ('Time Taken =', 307,91093406618216) --- Durée par multitraitement exécution
Question:
Je vois l'exécution séquentielle prend moins de temps et multithreading prend le plus de temps . Pourquoi? Je suis incapable de comprendre et également surpris par les résultats. Veuillez clarifier. Comme il s'agit d'une tâche gourmande en ressources processeur et que GIL est acquis, ma compréhension était Le multitraitement prendrait moins de temps alors que l'exécution par thread prendrait le plus de temps. Veuillez valider ma compréhension.