From the Python wiki on the GIL :
Note that potentially blocking or lengthy operations, such as I / O, image processing, and NumPy number crunching, occur outside of the GIL. Therefore, only in multi-threaded programs that spend a lot of time inside the GIL, interpreting CPython bytecode, does the GIL become a bottleneck.
PIL uses C extensions for most of the hard work. Thus, the actual image resizing should use multithreading, if applicable.
If you are asking about changing multiple images at the same time, I recommend exploring the Python multiprocessing library. This should provide the desired effect of using multiple cores.
source share