使用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中的多进程与多线程的使用
Apr 07 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python中类型检查的详细介绍
Feb 13 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
详解python中init方法和随机数方法
Mar 13 Python
python gdal安装与简单使用
Aug 01 Python
Python调用.NET库的方法步骤
Dec 27 Python
python中@property的作用和getter setter的解释
Dec 22 Python
python 如何用map()函数创建多线程任务
Apr 07 Python
python字典的元素访问实例详解
Jul 21 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
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
<script defer> defer 是什么意思
2009/05/10 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
2018/05/27 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
JS实现的雪花飘落特效示例
2019/12/03 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
详解Python中的相对导入和绝对导入
2017/01/06 Python
pycharm远程调试openstack代码
2017/11/21 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
python实现简单登陆流程的方法
2018/04/22 Python
浅析Python四种数据类型
2018/09/26 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
python3.7 sys模块的具体使用
2019/07/22 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Mac 使用python3的matplot画图不显示的解决
2019/11/23 Python
python编写微信公众号首图思路详解
2019/12/13 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
采购员的工作职责
2013/12/26 职场文书
高二化学教学反思
2014/01/30 职场文书
应届生求职信
2014/05/31 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
导游词之青岛崂山
2019/12/27 职场文书
python 网络编程要点总结
2021/06/18 Python
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL