骨挑战套餐

flyingtrain的Python项目详细描述


飞行列车-文档

使用迭代解析器从.txt文件中的长JSON传输列表中检索传输模型和总乘客容量

安装

这个项目是用python 2打包的,可以用pip安装。复制粘贴并在终端中运行此命令:

pip install flyingtrain

Docker(补充解决方案)

  • 此项目也已停靠。Docker需要安装才能在容器化方法中运行此项目。
  • Dockerfile使用python:2作为基础图像。
  • 有一些可行的命令如Makefile​,或者简单地执行make help,它将显示可以使用的make命令。(稍后我们将详细介绍)

工具

此项目使用ijson作为迭代json解析器,以避免将整个数据文件转储到内存中

用法

安装后,可以在虚拟环境中使用以下代码片段提取数据

importflyingtraintest_file='test.txt'# the full path of the fileflyingtrain.extract_data(test_file)

结果

(flyingtrain) chuhsuan@ubuntu:~/Desktop$ python
Python 2.7.12 (default, Nov 122018, 14:36:49)[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license"for more information.
>>> import flyingtrain
>>> flyingtrain.extract_data('test.txt')"planes": 524"trains": 150"cars": 14"distinct-cars": 3"distinct-planes": 2"distinct-trains": 1

docker解决方案
将数据文件复制到根文件夹,将文件名分配给main.py中的test_file,然后执行make run。卷绑定可以像makefile中的this line那样使用,以避免复制文件,但在这里没有实现,而将docker作为补充解决方案。

Docker解决方案的结果

chuhsuan@ubuntu:~/git/flyingtrain$ make run
docker build \
	-t chuhsuanlee/flyingtrain \
	.
Sending build context to Docker daemon  61.44kB
Step 1/5 : FROM python:2
 ---> 3c43a5d4034a
Step 2/5 : WORKDIR /usr/src
 ---> Using cache
 ---> 37e4d0e02609
Step 3/5 : COPY requirements.txt /usr/src/
 ---> Using cache
 ---> 85ae12b2a6f6
Step 4/5 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> 9d33ec10c044
Step 5/5 : ENTRYPOINT ["python", "main.py"]
 ---> Using cache
 ---> e3d261a60154
Successfully built e3d261a60154
Successfully tagged chuhsuanlee/flyingtrain:latest
docker run \
	--rm -v /etc/localtime:/etc/localtime -v /home/chuhsuan/git/flyingtrain:/usr/src \
	chuhsuanlee/flyingtrain
"planes": 524"trains": 150"cars": 14"distinct-cars": 3"distinct-planes": 2"distinct-trains": 1

基准

终端中使用以下命令来显示检索数据所需的时间

python -m timeit -s "import flyingtrain""flyingtrain.extract_data('test.txt')"

结果

1000 loops, best of 3: 684 usec per loop

这意味着执行一次大约需要684usec

docker解决方案
将文件名分配给benchmark.py中的test_file,然后执行make runbenchmark。同样,这里没有实现卷绑定,因此文件应该放在根文件夹下。

Docker解决方案的结果

[0.6676740646362305, 0.6634271144866943, 0.6310489177703857]

这意味着用3次重复计数和1000次执行计数来测量执行时间。平均每次执行需要654 usec

可能的优化

  • 首先,对于benchmarking,这里使用内置模块timeit。还可以使用一些第三方包(如memory_profiler)来监视进程的内存消耗以及逐行分析。
  • 其次,当记录量增加,并且不同传输的模型集不断增加时,如果我们仍然天真地为周围的每个模型保留一组计数,则可能会占用大量内存和CPU。这里有流近似算法,如HyperLogLog
  • 最后但并非最不重要的是,数据集的格式Protocol buffersrecordio,甚至Cap'n Proto都是一个很好的尝试。它是一种二进制存储格式,解析速度更快,并且能够抵御损坏。(记录文件是校验和,可以跳过损坏的部分而不丢失整个文件)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
decimal Java BigDecimal除法并获取N位数字   以不同的时间间隔重新启动Java计时器   java JFreeChart空指针问题   java Maven:通过cmd使用Install命令获取编译错误   计算CSV文件中行数的java内置方法?   在WorldWind Java/JOGL中使用自定义着色器   JavaSpringMVC安全性甚至在第一步都不起作用   java面板无法打开?   java抓住可丢弃的东西是一种不好的做法吗?   java如何安排JComboBox项   windows使用java设置系统时间的毫秒数   java如何检查ISO日期字符串中是否存在偏移量   java如何获取JPanel中鼠标指针的位置(无需任何鼠标操作)?   java如何获取log4j2。从pom读取文件名的属性文件。springboot中的xml   java编写二叉搜索树的插入方法   Java泛型覆盖静态方法解决方案   java在下面的代码中,语句SumDif()的作用是什么。run();意思是   java与集合对象有关系的类是否与集合的元素有关系?   java一旦恢复了用户的图像,如何将其保存在Drawable中