使用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 正则式 概述及常用字符
May 07 Python
python使用post提交数据到远程url的方法
Apr 29 Python
Python Requests 基础入门
Apr 07 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
python实现决策树
Dec 21 Python
Python解决走迷宫问题算法示例
Jul 27 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
python 带时区的日期格式化操作
Oct 23 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php调用mysql存储过程
2007/02/14 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
vue中实现回车键登录功能
2020/02/19 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
用python制作游戏外挂
2018/01/04 Python
python中字符串的操作方法大全
2018/06/03 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python中append实例用法总结
2019/07/30 Python
numpy中三维数组中加入元素后的位置详解
2019/11/28 Python
基于python检查矩阵计算结果
2020/05/21 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
小学生环保演讲稿
2014/04/25 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
六五普法宣传标语
2014/10/06 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
Nginx利用Logrotate实现日志分割
2022/05/20 Servers