使用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 相关文章推荐
JSON Web Tokens的实现原理
Apr 02 Python
Python中最大最小赋值小技巧(分享)
Dec 23 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
python3+PyQt5 实现Rich文本的行编辑方法
Jun 17 Python
Django 静态文件配置过程详解
Jul 23 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Django ORM实现按天获取数据去重求和例子
May 18 Python
python转化excel数字日期为标准日期操作
Jul 14 Python
基于python实现MQTT发布订阅过程原理解析
Jul 27 Python
Python安装Bs4的多种方法
Nov 28 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
php class类的用法详细总结
2013/10/17 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
php微信开发接入
2016/08/27 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
js实现倒计时时钟的示例代码
2013/12/17 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
在Python中使用第三方模块的教程
2015/04/27 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
python爬虫基础知识点整理
2020/06/02 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
Schecker荷兰:狗狗用品和配件
2019/06/06 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
2014年感恩节活动策划方案
2014/10/06 职场文书
优秀党员事迹材料
2014/12/18 职场文书
离职感谢信
2015/01/21 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
聘任证明怎么写
2015/03/02 职场文书
好员工观后感
2015/06/17 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python