2

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

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

python myscript.py imageFolder/

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

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

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

4

2 回答 2

10

从您的描述看来,这PIL.resize()是占主导地位的操作。该函数是用 C 而不是 Python 编写的。因此,我怀疑您是否可以期望 PyPy 对您的脚本产生很大影响。

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

于 2011-12-16T14:09:44.297 回答
1

对于处理图像,很可能脚本中的大部分处理时间都花在了 PIL 的图像处理函数中。

这些是用本机代码编写的,并且已经以全本机速度进行了优化-您不会从移动 Python 控制器部分(代码说明要打开哪些图像等)中获得太多收益-想想 10-20 字节的文件名反对 at每个图像正文中至少有 10000 字节)。

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

于 2011-12-16T14:12:52.100 回答