2012-04-25 3 views
4

python 2.7.2의 다중 처리 모듈을 사용하여 계산을 수행하려고합니다. 내 코드는 다음과 같다 : python prime crunching: processing pool is slower? 내가 각 코어에서 실행중인 프로세스를받을 수 모두 같은 사전보고 :Python의 메모 처리, 클래스 및 다중 처리

from multiprocessing import Pool 
import sys 
sys.setrecursionlimit(10000) 
partitions = [] 
class Partitions: 
    parts = {} #My goal is to use this dict to speed 
       #up calculations in every process that 
       #uses it, without having to build it up 
       #from nothing each time 
    def __init__(self): 
     pass 
    def p1(self, k, n): 
     if (k,n) in Partitions.parts: 
      return Partitions.parts[(k, n)] 
     if k>n: 
      return 0 
     if k==n: 
      return 1 
     Partitions.parts[(k,n)] = self.p1(k+1, n) + self.p1(k, n-k) 
     return Partitions.parts[(k,n)] 

    def P(self, n): 
     result = 0 
     for k in xrange(1,n/2 + 1): 
      result += self.p1(k, n-k) 
     return 1 + result 

p = Partitions() 

def log(results): 
    if results: 
     partitions.extend(results) 
    return None 

def partWorker(start,stop): 
    ps = [] 
    for n in xrange(start, stop): 
     ps.append(((1,n), p.P(n))) 
    return ps 

def main(): 
    pool = Pool() 
    step = 150 
    for i in xrange(0,301,step): 
     pool.apply_async(partWorker, (i, i+step), callback = log) 

    pool.close() 
    pool.join() 

    return None 

if __name__=="__main__": 
    main() 

나는이 새로운 오전, 나는 기본적으로이 페이지의 주요 코드의 형식을 복사 그들의 계산을 돕기 위해? 그것이 지금 행동하는 방법, 각 과정은 그것의 자신의 사전을 창조하고 미친 듯이 램을 먹는다.

답변