2016-06-13 2 views
1

itertools 모듈을 사용하여 다소 긴 문장의 문자 순서에 대한 가능한 순열 목록을 만듭니다. 그러나, 내가 할 때마다 나는 메모리가 부족합니다 (누군가가 묻기 전에 16GB RAM이 있습니다).Python 3 - 스크립트에서 메모리 사용 제한

이 기계에는 코드가 없지만 문서의 예제 중 하나의 카피 본이므로 비효율적 인 코드는 아니며, 파이썬이 너무 많은 순열을 수행하고 있습니다. 일단.

질문은, 파이썬이 사용하는 메모리 양을 제한하는 방법이 있습니까, 아마도 풀을 제공하는 것일까 요? 아마도 코드를 변경해야한다는 것을 알고 있지만 다른 프로젝트의 메모리 풀에서도 이익을 얻을 것입니다.

Conda를 사용하고 있기 때문에 Theano 모듈을 사용할 수 없습니다. 호환되지 않습니다. gc 모듈을 거의 사용하지 않으려 고 노력했지만 코드는 예제이고 문장은 약 12 ​​자이며 화면에 목록을 인쇄합니다.

편집 :

여기 내 코드의 주요 부분이다. 내 컴퓨터가 충돌을 일으킬 수 있으므로 실행을 권장하지 않습니다.

import itertools 
f = open('File.txt','w') 
for key, value in dict.items(): 
    print(list(itertools.permutations((str(counter-value)))),file=f) 

dict 변수는 코드가 검사하는 다른 문자가 포함 된 76 개의 요소 사전입니다. 코드의 실제 기능은 복잡하고 백 줄 정도의 스크립트에 들어 맞습니다. 그러나 이것이 제가 문제가되는 요점입니다. 코드가 작동한다면 문자 그대로 수백만 개의 순열을 계산해야합니다. 내 문제는 그것들을 모두 한꺼번에 시도한다는 것이다. 코드를 더 느리게 실행한다고해도 제한 할 수있는 방법이 있는지 알고 싶습니다.

+0

"문서에서 예제 중 하나의 탄소 복사본이기 때문에 비효율적 인 코드가 아닙니다."- 효율적인 코드로 만들지는 못합니다. 순열에 대한 반복은 매우 짧은 입력에 대해서만 좋은 아이디어입니다. 그렇게하지 않는 알고리즘을 사용하십시오. – user2357112

+0

메모리 사용을 제한하는 것이 가능하지만, 단지 나중에 더 일찍'MemoryError'를 사용하여 충돌하는 것을 의미합니다. – user2357112

+0

일반적으로 'MemoryError'를 치는 일반적인 경우는 컴퓨터에서 더 많은 RAM을 사용하는 것보다 바람직 할 수 있습니다. – BlackVegetable

답변

0

당신은 순열을 통해 단지 루프는 다음과 같이 파일에 각을 작성할 수 있습니다

import itertools 
f = open('File.txt','w') 
for key, value in dict.items(): 
    for i in itertools.permutations((str(counter-value))): 
     print(i, file=f) 

을가 발전기이므로, 항목이 '그래서 당신의 기억은 원 하나씩 검색됩니다 소진되다.

+0

완벽. 고맙습니다. –