У меня есть следующий код:Python Многопоточность против многопроцессорных против последовательного исполнения
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)
'''
Я побежал выше программы тремя способами:
- Первое последовательное выполнение ALONE (смотреть на комментариями, и комментарий верхний код)
- Второе многопотоковое выполнение ОДНО
- Третье выполнение многопроцессорности ОДНО
наблюдений за время end_time пуска следующим образом:
Общее время Выполняемые
- ('Время Взятым =', 342,5981313667716) --- Хронометража по резьбового исполнению
- ('Time Taken =', 232.94691744899296) --- Продолжительность спектакля последовательный Выполнение
- ('Время Взятые =', +307,91093406618216) --- Продолжительность казнью Multiprocessing
Вопрос:
Я вижу последовательное выполнение занимает минимум времени и многопоточность занимает наибольшее время , Зачем? Я не могу понять, а также удивлен результатами. Пожалуйста, уточните.
Поскольку это задача с интенсивным процессором и получен GIL, мое понимание было . Многопроцессорство заняло бы наименьшее время, в то время как выполнение с потоком занимает наивысшее время. Пожалуйста, подтвердите мое понимание.