【问题标题】:Store database connection in python? [closed]在python中存储数据库连接? [关闭]
【发布时间】:2013-06-25 03:19:38
【问题描述】:

我有一个脚本 A(python 脚本),它打开数据库并执行一些查询,然后关闭数据库连接。

我不确定脚本 A 会运行多长时间,这完全取决于负载。

我有另一个脚本 B(shell 脚本),它在 while 循环中运行脚本 A。这意味着脚本 A 将始终运行。

我的数据库使用了几乎 100% 或更多的 CPU。我认为是因为反复打开和关闭连接。

有什么方法可以提高性能?

我正在使用 MYSQL 数据库,计划迁移到 PostgreSQL。

我想将连接存储在某个地方并在它处于活动状态时使用相同的连接或创建一个新连接。我不知道该怎么做?有什么想法吗?

【问题讨论】:

    标签: python mysql database postgresql database-performance


    【解决方案1】:

    我认为是因为反复打开和关闭连接。

    基于什么证据?是否进行了任何跟踪/分析以尝试跟踪它?

    所有 Python 解释器启动也无济于事。总的来说,这一切听起来效率很低。

    我个人建议摆脱 shell 脚本包装器;在同一个 Python 脚本中执行此操作。在外部循环中连接一次,并在每次内部迭代中重复使用相同的连接。

    您无法“保存”连接。当脚本终止时,连接关闭。

    您可以使用像 PgBouncer 这样的连接池来减少创建和销毁所有这些连接的开销,但它不如在单个脚本中完成所有事情那么好。

    【讨论】:

    • 这很好,但我想使用 Python 脚本来加载不同的数据。如果我摆脱 shell 脚本,那么我将创建同一个文件的两个副本,我认为这不是那么有效。
    • @JayakumarBellie Er... 调整 Python 脚本以采用 命令行参数 以便您可以使用瘦包装器中的不同文件名调用它?您不必复制脚本来更改其行为,您可以使用环境变量、命令行参数、标准输入等。
    • 问题是关于数据库连接的。你将如何管理它?
    【解决方案2】:

    您可以在脚本 B 中添加一个逻辑标志,而不执行 A,除非它完成了上一次运行。您可以在启动脚本 A 后激活该标志并在最后停用它。这将防止重叠和并行执行 A。

    【讨论】:

    • 执行没有重叠。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2012-07-12
    • 2011-01-14
    • 1970-01-01
    • 2011-10-19
    • 2013-10-16
    相关资源
    最近更新 更多