首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ubuntu django运行管理的速度要快得多(我尝试了renice,将-18优先级设置为python进程pid)

ubuntu django运行管理的速度要快得多(我尝试了renice,将-18优先级设置为python进程pid)
EN

Stack Overflow用户
提问于 2013-03-28 17:22:01
回答 2查看 163关注 0票数 0

我正在使用ubuntu。我有一些管理命令,当运行时,做了很多数据库操作,所以它需要近15分钟。

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

我尝试了renice,将优先级设置为-18 (意味着非常高),但速度仍然较慢。

详细信息:

这是一个python脚本,其循环数接近10,000,且接近10个这样循环。在每个循环中,它保存到postgres数据库。

EN

回答 2

Stack Overflow用户

发布于 2013-03-28 17:47:48

如果你想让这个应用程序在多个cpu上运行,那么根据你的设置,你可以尝试很多方法。

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

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

第三,确保数据库被正确索引。如果你是在大字符串上进行搜索,那么搜索速度会很慢。

第四,在SQL中做你能做的一切,把很少的操作留给python,如果你允许的话,sql在进行数据操作时速度快得惊人。一旦你开始将数据从数据库中提取出来并放入代码中,那么事情就会变得很慢。

第五,使用可以在数据库内部缓存和优化的存储过程。这些可能比应用程序构建的查询快得多,后者不容易优化。

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-12-02 16:41:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15678119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档