【问题标题】:ubuntu django run managements much faster( i tried renice by setting -18 priority to python process pid)ubuntu django 运行管理速度更快(我通过将 -18 优先级设置为 python 进程 pid 来尝试 renice)
【发布时间】:2013-03-28 09:22:01
【问题描述】:

我正在使用 ubuntu。我有一些管理命令在运行时会进行大量数据库操作,因此需要将近 15 分钟。

我的系统监视器显示我的系统有 4 个 CPU 和 6GB RAM。但是,这个过程并没有利用所有 cpu 的 .我认为它只使用了一个 CPU,而且内存太少了。我想,如果我能够让它使用所有的 cpu 和大部分的 ram,那么这个过程将在很短的时间内完成。

我尝试了 renice ,将优先级设置为 -18(表示非常高),但速度仍然较低。

详情:

它是一个循环计数接近 10,000 的 python 脚本,并且有近十个这样的循环。在每个循环中,它都会保存到 postgres 数据库中。

【问题讨论】:

  • “大量的数据库操作”听起来瓶颈是 I/O 而不是 CPU。您可以尝试使用 ionice 来提高进程的 I/O 优先级,但如果没有更多关于这些数据库操作实际是什么的信息,这只是一个粗略的猜测。
  • 它是一个循环数接近 10,000 的 Python 脚本,而且这样的循环也接近十个。在每个循环中,它都会保存到 postgres 数据库中。
  • 听起来您可以从重构代码中受益。
  • 重构是另一回事,但我的意思是,它在我的系统中运行缓慢,但在服务器中运行速度更快(通常是高配置)。但是,我的笔记本电脑有 4cpus 和 6gb 内存,它只使用了一部分。必须有一个明确的解决方案。
  • 你试过ionice吗?此外,MattWritesCode 的回答包含有用的建议。

标签: python django ubuntu


【解决方案1】:

如果您希望让此应用程序在多个 cpu 上运行,那么您可以根据您的设置尝试多种方法。

想到的最明显的事情是让应用程序利用线程和多进程。这将允许应用程序一次“做更多”。显然,您在这里可能遇到的问题是并发数据库访问,因此您可能需要使用事务(此时您可能首先失去使用多进程的优势)。

其次,确保您没有打开和关闭大量数据库连接,确保您的应用程序可以根据需要保持连接打开。

第三,确保数据库被正确索引。如果您正在对大字符串进行搜索,那么事情会很慢。

第四,在 SQL 中尽你所能,将很少的操作留给 python,如果你允许的话,sql 在数据操作方面的速度非常快。一旦您开始将数据从数据库中取出并放入代码中,那么事情就会大大减慢。

第五,利用可以在数据库内部缓存和优化的存储过程。与无法轻松优化的应用程序构建查询相比,这些查询要快得多。

第六,不要在程序的每次迭代中保存。尝试生成一个批处理样式的作业,您可以更改许多记录,然后将所有这些记录保存在一个批处理作业中。这将减少每次迭代的 IO 量并大大加快进程。

Django 确实支持使用bulk update 方法,不久前stackoverflow 上也有一个关于一次保存多个django 对象的问题。

【讨论】:

    【解决方案2】:

    以防万一,您是否运行了命令 renice -20 -p {pid} 而不是 renice --20 -p {pid}?在第一种情况下,它将被赋予最低优先级。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多