2011-11-28 83 views
1

我们有一个重要的〜(50kloc)包/模块树(约2200文件),我们随每个作业一起运送到集群。作业运行约12小时,因此解压/引导(即为每个模块解析PYTHONPATH)的开销通常不是什么大问题。但是,随着我们工作节点中的核心数量增加,我们越来越多地遇到了调度程序将同时存在12个作业的情况,这将磨碎可能的暂存驱动器以停止服务所有请求(更糟的是,由于原因超出我们的控制,每个作业都需要一个单独的环回文件系统,因此驱动器上有两层间接路径)。是否可以预编译整个python包?

有没有办法向解释器提示每个文件的正确位置(没有使用遍布遍历的路径(可能覆盖导入?)来修饰代码),或将所有关联的.pyc文件打包成某种二进制blob那可以只读一次?

谢谢!

回答

3

我们在集群上遇到了类似这样的问题。 (Lustre文件系统的元数据操作速度很慢。)我们的解决方案是使用Python中的“zip import”工具。

在我们的例子中,我们做了一个stdlib的压缩文件(放置在sys.path中,如“/usr/lib/python26.zip”)和我们项目的另一个压缩文件,后者添加了后者到PYTHONPATH。

这要快得多,因为它是单个文件系统元数据读取,然后是快速读取目录的zip文件以找出内部内容,并缓存以备查找。

+0

正是我所需要的,我只是无法谷歌找到它正确的词。谢谢! – PerilousApricot

相关问题