I don’t know, if PIL is able to use all cores for the processing, but you could verify it by running PIL transformations in isolation and check the CPU usage.
Did you replace the “vanilla” PIL with any other drop-in library?
CC @fmassa: in case you’ve seen this behavior before.