UbuntuDjango运行管理的速度要快得多(我尝试了renice,将-18优先级设置为python进程pid)
我正在使用ubuntu。我有一些管理命令,它在运行时会执行大量数据库操作,因此需要将近15分钟的时间 我的系统监视器显示我的系统有4个cpu和6GB RAM。但是,这个过程并没有利用所有的cpu。我认为它只使用了一个CPU,而且ram太少了。我认为,如果我能够使用所有的cpu和大部分的ram,那么这个过程将在很短的时间内完成 我尝试了renice,将优先级设置为-18(意味着非常高),但速度还是比较慢 详情:UbuntuDjango运行管理的速度要快得多(我尝试了renice,将-18优先级设置为python进程pid),python,django,ubuntu,Python,Django,Ubuntu,我正在使用ubuntu。我有一些管理命令,它在运行时会执行大量数据库操作,因此需要将近15分钟的时间 我的系统监视器显示我的系统有4个cpu和6GB RAM。但是,这个过程并没有利用所有的cpu。我认为它只使用了一个CPU,而且ram太少了。我认为,如果我能够使用所有的cpu和大部分的ram,那么这个过程将在很短的时间内完成 我尝试了renice,将优先级设置为-18(意味着非常高),但速度还是比较慢 详情: 这是一个循环数接近10000的python脚本,而这也接近10个这样的循环。在每个循环
这是一个循环数接近10000的python脚本,而这也接近10个这样的循环。在每个循环中,它都会保存到postgres数据库。如果您希望使此应用程序在多个cpu上运行,那么根据您的设置,您可以尝试许多方法 想到的最明显的事情是让应用程序使用线程和多进程。这将允许应用程序一次“做更多”。显然,这里可能存在的问题是并发数据库访问,因此可能需要使用事务(在这一点上,首先可能会失去使用多进程的优势) 其次,确保您没有打开和关闭大量数据库连接,确保您的应用程序可以在需要的时间内保持连接打开 第三,确保数据库被正确索引。如果您在大字符串上进行搜索,那么速度会很慢 第四,在SQL中尽你所能让python几乎不做任何操作,如果你允许的话,SQL在处理数据方面的速度是惊人的快。一旦您开始将数据从数据库中取出并转换成代码,那么事情就会大大放缓 第五,使用可在数据库内部缓存和优化的存储过程。这些查询比无法轻松优化的应用程序生成查询快得多 第六,不要每次迭代都保存程序。尝试生成一个批处理样式的作业,通过该作业可以更改许多记录,然后将所有记录保存在一个批处理作业中。这将减少每次迭代的IO数量,并大大加快过程 Django确实支持使用一种方法,但不久前在stackoverflow上也有一个关于一次性保存多个Django对象的问题
ionice
来提高进程的I/O优先级,但没有更多关于这些数据库操作实际是什么的信息,这只是一个粗略的猜测。这是一个循环计数接近10000的python脚本,而这也几乎是十个这样的循环。在每个循环中,它都会保存到postgres数据库。听起来你可以从代码重构中获益。重构是另一回事,但我的意思是,它在我的系统中运行得很慢,但在服务器上运行得更快(通常是高配置)。但是,我的笔记本电脑有4个CPU和6 GB ram,而且只使用了部分内存。必须有一个明确的解决方案。您是否尝试过ionice
?此外,MattWriteCode的答案还包含有用的建议。