嘿,我们坚持这个错误,我真的需要帮助:
错误是:打开的文件过多。
CREATE OR REPLACE PROCEDURE SP1 (id_in IN number)
AS
BEGIN
--step 1
update_status(id_in,'Entering Step 1','I');
dbms_lock.sleep(30);
--step 2
update_status(id_in,'Entering Step 2','U');
dbms_lock.sleep(30);
--step 3
update_status(id_in,'Entering Step 3','U');
dbms_lock.sleep(30);
update_status(id_in,NULL,'D');
END;
--Run procedure from 1st session
exec sp1(<whatever the sequence value is>);
--Check status from second
select * from status where id = <whatever the sequence value was>
当我运行此代码RAM(系统内存)线性增加,一段时间后,我有太多的打开文件。 我该怎么办.. ??
任何帮助或建议都会受到赞赏吗?
答案 0 :(得分:1)
在这样的多阵列文件上调用np.load()
时,您应该使用“Context Manager”机制:
for path in data_files[:8]:
with np.load(path) as arc:
nat_queue += arc['nat_queue'].tolist()
temp_radius = arc['temp_radius'].tolist()
final_radius += arc['final_radius'].tolist()
os.unlink(os.path.join('/tmp/rad_data', path))
这样,数组arc
的存档将被关闭。
顺便说一下,如果输入很大,那么通过将所有数据转换为列表,你就不会有任何好处。您可以将每个已加载的数组附加到数组列表,然后在末尾执行np.concatenate(list_of_arrays)
以从所有文件的内容中获取单个大数组。