file_in_directory(File):-
working_directory(D,D),
directory_files(D,Entries),
member(File,Entries).
tree_file_in_directory(File):-
file_in_directory(File),
atom_codes('.treeliker',TreeLikerCodes),
atom_codes(File, FileCode),
append(_FileStripped,TreeLikerCode,FileCode).
run_tree_liker(File):-
process_create(path(java),
['-Xmx8gb','-cp', 'TreeLiker.jar', 'ida.ilp.treeLiker.TreeLikerMain','-batch', File], [stdout(pipe(Out)), process(PID)]).
forall(
tree_file_in_directory(File),
(
run_tree_liker(File),
run_weka(File, Lines)
)
).
我有一个这样的程序,其中run_tree_liker/1
和run_weka/2
使用process_create/3
来运行java jar程序。第一个程序为目录中的每个.treeliker文件创建一个.arff文件。然后,运行weka部分使用.arff文件并向数据库断言一些事实。
目录中有大约1400个.treeliker文件并且程序运行,但是在Error: Not enough resources: open_files
大约400后,它总是会被删除。如何让程序一次打开一个文件并在进程完成后关闭文件,以便不会发生此错误?
答案 0 :(得分:1)
我需要使用setup_call_cleanup / 3并关闭/ 1
run_jar(Jar,Option,Lines):-
setup_call_cleanup(
process_create(path(java),['-jar',Jar,Option],[stdout(pipe(Out))]),
read_lines(Out,Lines),
close(Out)).
感谢Jan在邮件列表上。