使用numpy加载时打开文件太多

时间:2017-05-27 08:21:41

标签: python numpy

嘿,我们坚持这个错误,我真的需要帮助:

  

错误是:打开的文件过多。

    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(系统内存)线性增加,一段时间后,我有太多的打开文件。 我该怎么办.. ??

任何帮助或建议都会受到赞赏吗?

1 个答案:

答案 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)以从所有文件的内容中获取单个大数组。