Итак, я возился с многопроцессорной библиотекой python последние несколько дней, и мне очень нравится пул обработки. Это легко реализовать, и я могу представить себе множество вариантов использования. Я выполнил пару проектов, о которых слышал раньше, чтобы ознакомиться с ними, и недавно закончил программу, которая использует грубые силы в играх с палачом.
Anywho, я проводил сравнение времени выполнения для суммирования всех простых чисел от 1 до 2 миллионов как в однопоточном режиме, так и через пул обработки. Теперь, для палача, помещение игр в пул обработки улучшило время выполнения примерно в 8 раз (i7 с 8 ядрами), но при измельчении этих простых чисел это фактически увеличило время обработки почти в раз. из 4.
Кто-нибудь может сказать мне, почему это так? Вот код для всех, кто заинтересован в его рассмотрении или тестировании:
#!/user/bin/python.exe
import math
from multiprocessing import Pool
global primes
primes = []
def log(result):
global primes
if result:
primes.append(result[1])
def isPrime( n ):
if n < 2:
return False
if n == 2:
return True, n
max = int(math.ceil(math.sqrt(n)))
i = 2
while i <= max:
if n % i == 0:
return False
i += 1
return True, n
def main():
global primes
#pool = Pool()
for i in range(1000000, 2000000):
#pool.apply_async(isPrime,(i,), callback = log)
temp = isPrime(i)
log(temp)
#pool.close()
#pool.join()
print sum(primes)
return
if __name__ == "__main__":
main()
В настоящее время он будет выполняться в одном потоке, чтобы проходить через пул обработки, раскомментировать операторы пула и закомментировать другие строки в основном цикле for.