【问题标题】:how can i remove sqlalchemy from ram after exiting function退出函数后如何从 ram 中删除 sqlalchemy
【发布时间】:2022-01-20 00:25:17
【问题描述】:

您好,我想使用 sqlalchemy 连接到我的表,获取一些列,对它们进行处理,然后继续。问题是当我退出该功能时,我的 ram 空间没有打开。这是一个虚拟示例。

from sqlalchemy import create_engine
import gc
mem = !free
dic = {}
dic_conn = {}
print(mem[1])
engine_ = create_engine(psql_string)
for tb in ['tb_1', 'tb_2', 'tb_3', 'tb_4',]:
    conn = engine_.connect()
    dic[tb] = conn.execute("select * from tb".format(tb))
    dic_conn[tb] = conn
for k in dic_conn.keys(): dic_conn[k].close(); dic_conn[k] = None
for k in dic.keys(): dic[k].close(); dic[k] = None
engine_.dispose()
del dic_conn
del dic
del engine_
gc.collect()
mem = !free
print(mem[1])

我尝试了我能想到的任何方法,请告诉我如何释放内存

【问题讨论】:

  • 这能回答你的问题吗? Releasing memory in Python
  • 不,不是因为它不是 python 的东西,它似乎是 sql alchemy 的东西。 sqlalchemy 不会释放内存
  • 连接 conn 永远不会关闭,因此可能会打开 postgres 连接,这将显示为 Python 进程。除此之外,不是很清楚您的代码到底在演示什么。mem = !free 不是有效的语法。您在哪里看到 SQLAlchemy 保留 RAM?你怎么知道是 SQLAlchemy?
  • !free 是一个 jupyter 作弊码

标签: python sqlalchemy garbage-collection


【解决方案1】:

sqlalchemy 在客户端拥有缓冲区,您也可以在服务器端拥有缓冲区,这样 sqlalchemy 会释放缓冲区空间。这个命令会做。

conn = engine_.execution_options(stream_results=True).connect()

【讨论】:

    猜你喜欢
    • 2015-02-23
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多