finalización de grupo de multiprocesamiento de Python

Estoy trabajando en una granja de renderizado, y necesito que mis clientes puedan iniciar varias instancias de un renderizador, sin bloquear para que el cliente pueda recibir nuevos comandos. Lo tengo funcionando correctamente, sin embargo, estoy teniendo problemas para terminar los procesos creados.

A nivel global, defino mi grupo (para poder acceder a él desde cualquier función):

p = Pool(2)

Entonces llamo a mi renderizador con apply_async:

for i in range(totalInstances):
    p.apply_async(render, (allRenderArgs[i],args[2]), callback=renderFinished)
p.close()

Esa función finaliza, inicia los procesos en segundo plano y espera nuevos comandos. He hecho un comando simple que matará al cliente y detendrá los renders:

def close():
'close this client instance'
tn.write ("say "+USER+" is leaving the farm\r\n")
try:
    p.terminate()
except Exception,e:
    print str(e)
    sys.exit()
sys.exit()

No parece dar un error (se imprimiría el error), Python termina, pero los procesos en segundo plano todavía se están ejecutando. ¿Alguien puede recomendar una mejor manera de controlar estos programas lanzados?

Respuestas a la pregunta(3)

Su respuesta a la pregunta