1

マルチコア プロセッサを利用できるように、アルゴリズムを実装する必要があります。これまでのところ、私はこれを持っています:

def handle_primes(n, segments):
    """ Returns the count of primes below n, using segments """
    if __name__ == '__main__' :
        # Initialize
        count = 0
        pool = Pool(processes=segments)
        segment_size = n/segments

        # Count primes in each segment
        for start in xrange(2, n+1, segment_size+1):
            end = start+segment_size
            if end>n:
                end = n
            count += pool.apply_async(countprimes, [start, end]).get()

        return count

countprimes()セグメント内の素数を最初から最後まで数えます。

このコードは、 のみを使用した通常の実装よりも遅く実行されcountprimes()ます。マルチプロセッシング モジュールの使い方が間違っていますか?

4

1 に答える 1

1

get意志がブロックします。2 つのループを記述する必要があります。これを試して:

 # Count primes in each segment
 processes = [] 
 for start in xrange(2, n+1, segment_size+1):
     end = start+segment_size
     if end>n:
         end = n
     processes.append(pool.apply_async(countprimes, [start, end]))
 for process in processes:
     count += process.get()
于 2013-06-02T22:20:03.230 に答える