Я пытаюсь профилировать базовую функцию в Python, чтобы увидеть сравнительное преимущество многопоточности для оценки его результатов. Кажется, что потоковая версия все хуже ухудшается по мере увеличения размера данных, по которым применяется функция. Есть ли накладные расходы в начальных потоках, которые я не учитываю здесь? Может кто-нибудь объяснить, как на самом деле добиться многопоточной оптимизации/что я делаю неправильно?многопоточность работает медленнее, чем один поток?
from multiprocessing import Pool
def f(x):
return x*x
pool = Pool(processes=4)
import timeit
print timeit.timeit('map(f, range(20000000))', setup = "from __main__ import f", number = 1)
print timeit.timeit('pool.map(f, range(20000000))', setup = "from __main__ import f, pool", number = 1)
Результаты:
5.90005707741
11.8840620518
[Finished in 18.9s]
Если уместно, я побежал это в Sublime Text 3.
Вы говорите о многопоточности, но вы не используете темы вообще. Я не говорю, что многопроцессорность плохая (обычно это хорошо!), Но ваша терминология запутанна. –
У вас есть процессор, способный обрабатывать? Если нет, тогда возникает своего рода симулированная многопоточность. Не уверен, что вот что вызывает это, но я думаю, что его возможный – user3282276
вы знаете, что многопроцессорная обработка - это не то же самое, что многопоточность. Я бы предположил, что причина, по которой это происходит хуже (в данном случае), заключается в том, что ваш процесс мало что делает, но есть много накладных расходов при настройке процессов, общении с ними и т. Д. –