微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何加快删除速度

如何解决如何加快删除速度

我们的代码中有一个大熊猫数据框-形状为(102730344,50)。为了释放内存,在不再需要此数据帧时,我们将其放入del。该del语句当前需要4个小时才能在功能强大的硬件上运行。有没有办法加快速度?

这是代码流:

big_data_df,small_df,medium_data,smaller_df = get_data(params)
#commented out code
del big_data_df # this takes 4 hours

因此,我们调用一个函数,该函数返回4个数据帧,其中一个是我们稍后要删除的大数据帧。我们已经注释掉了获取数据框和不再需要进行测试时删除它之间的代码。然后运行del,在执行之后的一条日志记录语句显示运行时间为4个小时。

解决方法

您可以在子流程中创建大型数据框,但仅将所需的内容发送给父级,然后使用os_exit()跳过单个对象的清理。这对您是否有效取决于返回数据的相对大小。在您的情况下,可能会在子流程中完成SQL和数据框的创建/处理。在此示例中,我将结果发送到stdout上,但是将其保存到临时文件中也是合理的。我正在使用泡菜,但是其他序列化程序(例如pyarrow)可能会更快。

...。在您的情况下,它可能根本不起作用。

dfuser.py

import sys
import subprocess as subp
import pandas as pd

try:
    proc = subp.Popen([sys.executable,'dfprocessor.py'],stdin=subp.PIPE,stdout=subp.PIPE,stderr=None)
    df = pd.read_pickle(proc.stdout,compression=None)
    print("got df")
    proc.stdin.write(b"thanks\n")
    proc.stdin.close()
    proc.wait()
    print(df)
finally:
    print('parent done')

dfcreator.py

import pandas as pd
import sys
import os

try:
    # add your df creation and processing here
    df = pd.util.testing.makeDataFrame()
    small_df = df # your processing makes it smaller
    # send
    small_df.to_pickle(sys.stdout.buffer,compression=None)
    sys.stdout.close()
    # make sure received
    sys.stdin.read(1)
finally:
    # exit without deleting df to save time
    sys.stderr.write("out of here\n")
    os._exit(0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?