使用Python设置tmpfs来加速项目的教程
作者:goldensun 时间:2023-12-24 09:38:34
对我当前工程进行全部测试需要花费不少时间。既然有 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的这个变通使用能帮助你建立一个更快速的开发环境,而无须遭受所有的脚本麻烦。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python中的信号通信 blinker的使用小结
![](https://img.aspxhome.com/file/2023/2/104862_0s.jpg)
使用python生成云词图实现画红楼梦词云图
![](https://img.aspxhome.com/file/2023/4/131374_0s.jpg)
解决python2中unicode()函数在python3中报错的问题
![](https://img.aspxhome.com/file/2023/0/60980_0s.png)
Python用内置模块来构建REST服务与RPC服务实战
![](https://img.aspxhome.com/file/2023/4/131504_0s.png)
python3利用Socket实现通信的方法示例
![](https://img.aspxhome.com/file/2023/7/107887_0s.png)
基于python实现的抓取腾讯视频所有电影的爬虫
Golang import 导入包语法及一些特殊用法详解
一小时学会TensorFlow2之自定义层
![](https://img.aspxhome.com/file/2023/5/128735_0s.jpg)
解读ASP.NET 5 & MVC6系列教程(2):初识项目
![](https://img.aspxhome.com/file/2023/8/75528_0s.png)
pygame实现简单五子棋游戏
vue踩坑日记之params传递参数问题
![](https://img.aspxhome.com/file/2023/7/126407_0s.png)
python装饰器使用实例详解
python生成lmdb格式的文件实例
简述MySQL主键和外键使用及说明
python+pyqt实现右下角弹出框
![](https://img.aspxhome.com/file/2023/7/120997_0s.jpg)
oracle12C安装步骤(图文详解)
![](https://img.aspxhome.com/file/2023/3/64093_0s.png)
LINUX下Oracle数据库用户创建方法详解
Vue中使用vee-validate表单验证的方法
![](https://img.aspxhome.com/file/2023/2/123142_0s.jpg)
基于K-Means聚类算法演示及可视化展示
![](https://img.aspxhome.com/file/2023/6/105356_0s.png)
python中如何使用朴素贝叶斯算法
![](https://img.aspxhome.com/file/2023/5/95795_0s.png)