저는 약간의 처리를하기 위해 많은 양의 데이터를 처리하는 프로그램을 작성했습니다. 세 가지 단계가 포함됩니다파이썬 파일이 닫히지 않습니다
- 데이터 읽기
- 마십시오 처리
- 쓰기 데이터 파일로.
코드를 처음 실행하는 동안 두 단계가 성공적으로 완료되었습니다 (데이터가 랩톱 구성에 비해 크기 때문에 Linux에서 스왑 공간을 사용하여 작업하고 있습니다).
이제 세 번째 단계 : 데이터가 파일에 성공적으로 기록됩니다. 하지만 내 코드는 feat.close()
(feat는 파일 포인터 임)에서 멈춘다. 프로세스가 실행되는 동안 파일을 열면 완전한 데이터가 기록되지만 내 파일은 닫히지 않습니다.
코드 :
#!/usr/bin/env python
from __future__ import print_function
import pickle
import sys
import numpy as np
import posTagsToTriGramFrequency as pt
import itertools
import gc
if sys.argv[1] == '-h':
print("Usage: ./featureSelection <n(authorLimit)> <k(SD weight)> <nGramSize> <folder>")
sys.exit()
n = int(sys.argv[1])
k = int(sys.argv[2])
nGramSize = int(sys.argv[3])
folder = sys.argv[4]
print('reading features')
feat = open('../../../../dataDump/'+ folder +'/features.dump','r')
features = {}
tagsnGram = [tuple(x) for x in itertools.product(pt.getTags(), repeat=nGramSize)]
gramdict = {}
for gram in tagsnGram:
gramdict[gram] = []
flag = 1
author = ''
for line in feat:
if(line == '\n'):
flag = 1
elif flag == 1:
author = line.split('/')[-1][:-1]
print(line, end='')
features[author] = gramdict.copy()
flag = 0
else:
tagsFreq = iter(line.split())
for tag in tagsnGram:
features[author][tag].append(float(tagsFreq.next()))
feat.close()
print('Calculating waht to delete')
nflag = 0
kflag = 0
toDel = []
for tagGram in tagsnGram:
nflag = 0
for author in features:
kflag = 0
for doc in features[author][tagGram]:
if doc == 0 : kflag += 1
if kflag >= k:
nflag += 1
break
if nflag >= n:
toDel.append(tagGram)
break
for item in toDel:
for author in features:
del features[author][item]
f = open('../../../../dataDump/'+ folder +'/tagsInfo.dump','w')
f.write('k:' + str(k) + ',\t n:' + str(n) + '\n')
f.write('Deleted tags:\n')
for item in toDel:
f.write(str(item) + ' ')
f.write('\n\nSelected Tags:\n')
for tagGram in features.itervalues().next():
f.write(str(tagGram) + ' ')
f.close()
print("Writing Back Features")
feat = open('../../../../dataDump/'+ folder +'/selectedFeatures.dump','w')
for author in features.keys():
feat.write(author + '\n')
print(author)
for tag in features[author]:
for doc in features[author][tag]:
feat.write(str(doc) + ' ')
feat.write('\n')
feat.write('\n')
del features[author]
#gc.collect()
print('Closing File')
feat.close()
는 마지막 행을 참조하십시오. 내 콘솔에서 Closing file
인쇄되고 있지만 그 후 내 코드가 붙어 있습니다.
내 콘솔 출력 :
[email protected]~/Projects/workspace/irProject/completepythonbased/authAttrib (irProject)>>./featureSelection.py 35 125 3 3GramFreq
reading features
Ajit_Popat
Mukund_Mehta
Parajit_Patel
Priyadarshi
Kumarpad_Desai
Bhaven_Kacchi
Shantibhai_Agrawat
Pravin_Darji
Ankit_Trivedi
Sharad_Rawal
Tushar_Shukla
Chandrakant_Mehta
Jay_Vasavda
Dolat_Bhatt
Munindra
Mrugesh_Vaishnav
Kulinchandra_Yagnik
Zaverilal_Mehta
Priti_Shah
Vasant_Mistri
Vatsal_Vasani
Dinesh_Mistri
Devesh_Mehta
Dhaval_Mehta
Urvish_Kothari
Madhusudan_Parekh
Vihari_Chaya
Virendra_Kapoor
Mukul_Choksi
Joravarsinh_Jadav
Ashok_Dave
Nasir_Ismaeli
Joban_Pandit
Priyakant_Parikh
Sudarshan_Upadhyay
Gajendra_Shah
Altaf_Patel
Bhalchandra_Jani
Shashin
Hansal_Bhachech
Calculating waht to delete
Writing Back Features
Pravin_Darji
Ajit_Popat
Kulinchandra_Yagnik
Sharad_Rawal
Madhusudan_Parekh
Shantibhai_Agrawat
Gajendra_Shah
Hansal_Bhachech
Vihari_Chaya
Virendra_Kapoor
Sudarshan_Upadhyay
Priyadarshi
Tushar_Shukla
Dolat_Bhatt
Urvish_Kothari
Vasant_Mistri
Mukund_Mehta
Zaverilal_Mehta
Kumarpad_Desai
Vatsal_Vasani
Bhaven_Kacchi
Mrugesh_Vaishnav
Bhalchandra_Jani
Priyakant_Parikh
Chandrakant_Mehta
Mukul_Choksi
Joravarsinh_Jadav
Munindra
Joban_Pandit
Devesh_Mehta
Priti_Shah
Ankit_Trivedi
Dinesh_Mistri
Dhaval_Mehta
Ashok_Dave
Nasir_Ismaeli
Parajit_Patel
Jay_Vasavda
Altaf_Patel
Shashin
Closing File
^C
[1]+ Killed ./featureSelection.py 35 125 3 3GramFreq
왜 이런 일이?
strace here을 찾을 수 있습니다.
편집 : 내가 가까이 후 뭔가를 인쇄 할 시도하고, 인쇄 인 문제가 프로그램을 종료에 의미합니다. 3GB의 RAM과 3GB의 스왑 공간 @Justing을 사용하고 있습니다. 이 기억을 채우기 위해 10-20 분이 걸렸고이 기억을 정리하기 위해 약 2 시간을 기다렸습니다. 문제가 있다고 생각합니다. 위의 strace를 업로드했습니다. 참조하십시오. 당신이 작성 완료되면 디스크에 플래시합니다 with
작업 할
파이썬에서 파일 작업을 할 때, 가장 좋은 방법은 [은'with' 문 (http://www.youtube.com/watch?v=lRaKmobSXF4&lc=abvyzpzCoB4yV2md5OqJQZgXTd00VmErxY868GfWsEo&lch=email&feature=em-를 사용하는 것을 주목할 필요가 comment_received & lcor = 1). –
코드가 잘 보입니다. 파일이 크다면, OS가 디스크에 무엇인가를 플러시하거나, 스왑 안팎으로 페이지를 이동시키기를 기다리는 것일 수도 있습니다. "Closing File"다음에 잠시 기다려 보신 적이 있으십니까? – Aya
무슨 일이 일어나는지 보려면'strace'를 사용하여 프로그램을 실행하십시오. – glglgl