2012-12-19 2 views
1

특히 크게 입력 집합에 Python longest common subsequence 알고리즘을 실행하여 결과 LCS 길이를 2 차원 numpy 배열로 저장했습니다. 시간이 지남에 따라 속도가 느려지고있는 것으로 나타났습니다. 3 분의 1 정도가되면 크롤링 속도가 느려지고 추락하여 수수께끼의 오류 메시지 인 "pnc = : N"을 출력하고 이후에는 개행하지 않습니다 (내 프로그램은 출력 전에 한 줄 더 출력을 중단했습니다). 또한이 시점에서 많은 양의 할당 된 메모리를 릴리스하는 것으로 나타났습니다. 누구든지 이것이 무엇을 의미하는지 알 수 있습니까?Python : Odd "pnc = : N"오류 메시지

편집 : 추락 코드의 일부는 다음과 같습니다

#m and n are both around 12,000 
lengths = np.empty((m+1, n+1), dtype=np.uint) 
lengths[0,:] = 0 
lengths[1:,0] = 0 

if m > 0 and n > 0: 
    for i in xrange(1, m + 1): 
     for j in xrange(1, n + 1): 
      #eqTest is a function comparing two sequence elements, like cmp 
      eq = eqTest(a[i-1], b[j-1]) 
      if eq: 
       lengths[i,j] = lengths[i-1,j-1] + 1 
      elif lengths[i-1,j] >= lengths[i,j-1]: 
       lengths[i,j] = lengths[i-1,j] 
      else: 
       lengths[i,j] = lengths[i,j-1] 

내가 천천히 또는 전체 LCS 길이 배열이에 할당되어 있기 때문에, 시간이 지남에 따라 더 많은 자원을 사용하는 원인을 모르겠어요 처음 시작한 다음 채워집니다. 내가 사용하고있어 평등 테스트가 부분적으로 C로 작성으로 설명하기 어렵지만, 효과적으로입니다 :

def eqTest(l1, l2): 
    words1 = l1.split() 
    words2 = l2.split() 
    if len(words1) == len(words2): 
     for i in xrange(len(words1)): 
      #MATCHERS is a list of around 10 compiled regular expressions 
      for m in MATCHERS: 
       if m.match(s1) is not None and m.match(s2) is not None: 
        break 
      else: 
       result = False 
       break 
     else: 
      result = True 
    else: 
     result = False 
return result 

답변

0

이 프로그램이 종료 것을 의미한다 "후 추락"하면, "또한 좋은를 해제 출연 이 시점에서 할당 된 메모리 거래. " 운영 체제가 프로세스에 할당 된 메모리를 회수하는 효과입니다.

귀하의 설명에 따르면 프로그램이 프로세스 크기에 대한 운영 체제 제한을 초과했기 때문에 (아마도 Linux에서 충돌이 발생합니다).

더 많은 사항은 코드를 보는 데 도움이됩니다. 항상 코드를 게시해야합니다.

+0

내 코드는 수천 줄이지만, 필자는 상대적 부분이라고 생각하는 부분을 추가했습니다. 나는 Windows 7을 사용하고 있습니다. 내 시스템 모니터를 확인하면 내 프로그램이 아마도 C 코드에서 메모리를 누설하고 있다는 것이 확실합니다. 나는 대부분이 오류 메시지에 대해 궁금해했다. 저를 위해 그것을 풀 수 있습니까? – dpitch40

+0

@ dpitch40 표준 파이썬 오류가 아닙니다. 어떤 제 3 자 모듈을 사용하고 있는지 모르겠습니다. 소스 코드를 grepping하고 사용중인 다른 모듈의 소스를 확인해보십시오. – Marcin