即使脚本只运行一次,Pypy JIT也会提高速度?

时间:2011-12-16 14:05:59

标签: python pypy

我有一个脚本可以加载数百个图像,调整它们的大小,然后组成一个更大的图像

每次都以不同的图像集开始:

python myscript.py imageFolder/

使用Pypy在virtualenv中运行它并没有显示出明显的速度增益(使用mprofile在~8秒内运行,pypy版本在PIL.resize中花费更多时间,在包初始化中花费更少)。

这是因为JIT只为长时间运行的流程提供了优势?

如果是这样,我可以将脚本转换为守护进程(但我担心内存泄漏)。

2 个答案:

答案 0 :(得分:10)

根据您的描述,似乎PIL.resize()是占主导地位的操作。该函数是用C语言编写的,而不是用Python编写的。因此,我怀疑你可以期待PyPy对你的剧本产生很大的影响。

如果您希望加快速度,可以考虑在多个核心上并行加载和调整图像大小。我一般不建议在Python中使用线程,通常建议使用multiprocessing模块。但是,对于这个特定任务,多线程实际上可能更适合。

答案 1 :(得分:1)

为了处理图像,可以将脚本中的大部分处理时间花在PIL的图像处理功能中。

这些是用本机代码编写的,并且已经以完全本机速度进行了优化 - 你不会获得太多移动Python控制器部分(代码说明要打开哪些图像,等等) - 认为文件需要10-20个字节每个图像体中至少10000个字节的名称。)

如果您需要更快的速度,请忘记尝试pypy - 但是,如果您使用的是多核计算机,则可以尝试通过multiprocess模块并行化代码。

相关问题