使用Python设置tmpfs来加速项目的教程


Posted in Python onApril 17, 2015

 对我当前工程进行全部测试需要花费不少时间。既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率。

但优点也是缺点,tmpfs 只把结果保存在内存中,所以你必须自己编写脚本来把结果回写到磁盘上进行保留。而且这些脚本必须良好书写和执行,否则就要失去部分或全部的工作成果了。

一种常见的方法是直接在tmpfs文件夹中工作,然后把工作成果备份到磁盘上的一个文件夹中。当您的机器启动时你从那个备份文件夹恢复tmpfs文件夹。启动之后用cron同步tmpfs文件夹和磁盘文件夹。

我发现这个设置有点复杂容易出错。在启动的时候,或者对于crom,我从没有真正的相信。现在我用一种简单得多的设置,根本不用cron。

在我的机器上运行一个单项测试,使用IDE并发布于web服务器,其性能通常是合理的,只有运行全部测试需要许多时间。

我发现最佳之处是在磁盘上设置一个workspace,与/dev/shmand目录下运行所有测试的tmpfs同步。这或多或少使我的设置无需改变,并消除了可能松散的工作,这些仅仅是因为我在正确设置方面太垃圾了。

性能提升的结果是合理的:
 

$ nosetests && run_tests.py
........................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 248 tests in 107.070s
 
OK
........................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 248 tests in 19.423s
 
OK

现在比原来提高了 5 倍速度。

使用 python 来进行设置非常简单:
 

#!/bin/bash -e
 
WORK=src/py
LOG=$(pwd)/test.log
TARGET=$(hg root)
SHADOW=/dev/shm/shadow/$TARGET
 
date > $LOG
mkdir -p $SHADOW
 
cd $SHADOW
rsync --update --delete --exclude=".*" --exclude=ENV --archive $TARGET ./..
 
if [ ! -d ENV ]
then
  virtualenv ENV
fi
. ENV/bin/activate
 
cd $WORK
python setup.py develop >> $LOG
nosetests $* | tee -a $LOG
exit ${PIPESTATUS[0]}

我只要重复同步到/dev/shm目录,设置测试环境(virtualenv and python setup.PY)和运行测试(nosetests)。

在tmpfs文件夹里仍可用命令行运行单个测试。也可以把这个从你的IDE中踢走,但你会失去你的测试运行和调试的能力。如我之前所说,我现在不需要这些。

我希望我对tmpfs的这个变通使用能帮助你建立一个更快速的开发环境,而无须遭受所有的脚本麻烦。

Python 相关文章推荐
python 读写、创建 文件的方法(必看)
Sep 12 Python
Django开发中复选框用法示例
Mar 20 Python
Python去除、替换字符串空格的处理方法
Apr 01 Python
Python应用库大全总结
May 30 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
Python requests设置代理的方法步骤
Feb 23 Python
python绘制玫瑰的实现代码
Mar 02 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
python中not、and和or的优先级与详细用法介绍
Nov 03 Python
python实现的人脸识别打卡系统
May 08 Python
在Python上基于Markov链生成伪随机文本的教程
Apr 17 #Python
基于scrapy实现的简单蜘蛛采集程序
Apr 17 #Python
在Python的Django框架中实现Hacker News的一些功能
Apr 17 #Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 #Python
在Python中实现贪婪排名算法的教程
Apr 17 #Python
在Linux下调试Python代码的各种方法
Apr 17 #Python
Python脚本在Appium库上对移动应用实现自动化测试
Apr 17 #Python
You might like
PHPShop存在多个安全漏洞
2006/10/09 PHP
php旋转图片90度的方法
2013/11/07 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
django1.8使用表单上传文件的实现方法
2016/11/04 Python
轻松掌握python设计模式之访问者模式
2016/11/18 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
银行金融服务方案
2014/06/11 职场文书
教师个人读书活动总结
2014/07/08 职场文书
论文答谢词
2015/01/20 职场文书
检讨书格式
2015/01/23 职场文书
开业庆典致辞
2015/08/01 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android