На самом деле, в вашем примере есть один важный общий ресурс - ваш монитор (или stdout
).
print
- это относительно медленная операция (по сравнению с циклами ЦП ...), и онавызывает конфликты между вашими процессами.
Сравнительный анализ правильности параллельной работы - сложная задача, на нее влияют многие факторы и характеристики процессора (например, кеша).
Попробуйте заменить свою рабочую нагрузку.с одним, который очень подходит для многопроцессорной обработки (например, параллельная работа над различными частями массива, умножение матриц ...)
Еще одна важная вещь: порождение новых процессов также требует времени, и для этого нужноОкупаемость работы, проделанной в каждом процессе, должна быть значительной.Если вы немного увеличите диапазон вашего цикла, разница должна быть в пользу многопроцессной версии:
import time
from multiprocessing import Process
def foobar(a):
for i in range(1,10000000):
a*i
return
if __name__ == "__main__":
Tthreading = time.time()
p1= Process(target= foobar, args=(3,))
p2 = Process(target= foobar, args= (2,))
p3 = Process(target= foobar, args= (4,))
p4 = Process(target=foobar, args=(123,))
allprocess = [p1,p2,p3,p4]
for p in allprocess:
p.start()
for p in allprocess:
p.join()
print(time.time() - Tthreading)
#Single-threaded
Tsingle = time.time()
foobar(3)
foobar(2)
foobar(4)
foobar(123)
print(time.time() - Tsingle)
на моей машине это выдает:
0.44509196281433105
1,3775699138641357