2011-12-16 73 views
2

我有一个加载几百图像,调整他们的脚本,然后组成一个更大的图像即使脚本只运行一次,Pypy JIT也会提高速度吗?

每次开始使用一组不同的图像:

python myscript.py imageFolder/ 

与Pypy运行它在virtualenv中没有按不会显示明显的速度增益(所有运行在mprofile大约8秒内,pypy版本花费更多时间在PIL.resize中,而在包初始化中花费更少)。

这是因为JIT仅为长时间运行的进程提供优势?

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

+1

在pypy中运行分析比在CPython中收取更多的费用。确保你没有分析检查你的表现。 – fijal 2011-12-19 11:35:04

回答

10

从您的描述看,PIL.resize()是占主导地位的操作。该函数是用C编写的,而不是用Python编写的。因此,我怀疑你可以期待PyPy对你的脚本有很大的改变。

如果您希望加快速度,可以考虑在多个内核之间并行加载和调整映像大小。我通常不建议在Python中使用线程,通常建议使用multiprocessing模块。然而,对于这个特定的任务来说,多线程实际上可能更适合。

+0

+1。 PyPy的JIT将只优化Python代码(这就是为什么他们重​​新实现原来用Python编写的东西)。 – 2011-12-16 14:11:08

1

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

这些是用本地代码编写的,并且已经以全速本地优化 - 你不会获得太多的移动Python控制器部分的代码(代码说明要打开哪些图像,等等 - 考虑10-20字节文件名至少10000字节在每个图像正文)。

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

相关问题