python prime crunching: пул обработки работает медленнее?

Итак, я возился с многопроцессорной библиотекой 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.

8
задан Laharah 26 August 2011 в 19:31
поделиться