使用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制作爬虫爬取京东商品评论教程
Dec 16 Python
Python 加密与解密小结
Dec 06 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
linux安装python修改默认python版本方法
Mar 31 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
python 获取等间隔的数组实例
Jul 04 Python
Django框架模板用法入门教程
Nov 04 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python学生信息管理系统实现代码
Dec 17 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
如何卸载python插件
Jul 08 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 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
Zend 输出产生XML解析错误
2009/03/03 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
html向js方法传递参数具体实现
2013/08/08 Javascript
js获取url参数值的两种方式
2013/09/10 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[02:46]解说DC:感谢430陪伴我们的DOTA2国际邀请赛岁月
2016/06/29 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
python3中布局背景颜色代码分析
2020/12/01 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
大学生入党积极分子自我评价
2014/09/20 职场文书
安全先进班组材料
2014/12/26 职场文书
倡议书作文
2015/01/19 职场文书
运动会观后感
2015/06/09 职场文书
Python3中最常用的5种线程锁实例总结
2021/07/07 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python
使用CSS实现音波加载效果
2023/05/07 HTML / CSS