[Image-SIG] PIL and multiprocessing module

John Anderson sontek at gmail.com
Sun May 13 23:11:53 CEST 2012


I was wondering if anyone has used PIL with the multiprocessing module.

I would like to do some pixel by pixel translations using the .load()
function and shared memory with the multiprocessing module.


This is the code I have so far:
def convert_to_gs_load(surf):
    width, height = surf.size
    pix = surf.load()

    for x in range(width):
        for y in range(height):
            alpha = 1
            red, green, blue = pix[x, y]
            average = (red + green + blue) // 3
            gs_color = (average, average, average, alpha)
            pix[x, y] = gs_color

def convert_to_gs_load_mp(surf):
    width, height = surf.size
    pix = surf.load()

    t1 = multiprocessing.Process(target=gs_load, args=(pix, width, 0,
height / 4))
    t2 = multiprocessing.Process(target=gs_load, args=(pix, width, height /
4, height / 2))
    t3 = multiprocessing.Process(target=gs_load, args=(pix, width, height /
2, 3 * height / 4))
    t4 = multiprocessing.Process(target=gs_load, args=(pix, width, 3 *
height / 4, height))
    threads = [t1, t2, t3, t4]

    for thread in threads:
        thread.start()

    for thread in threads:
        thread.join()

The problem is the 'pix' object is not in shared memory, so this doesn't
work. Is there a way I could use Value or Array to store the object?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/image-sig/attachments/20120513/332aa2c8/attachment.html>


More information about the Image-SIG mailing list