wxPython subprocesos de la GUI sin bloqueo Y multiprocesamiento?

Python 2.7.3 x64 wxPython 2.8 x64

He leído bastante sobre subprocesamiento y multiprocesamiento de python, particularmente algunos artículos de Doug Hellmann, que han ayudado enormemente. Sin embargo, estoy confundido acerca de una cosa ...

I pensamiento el módulo de multiprocesamiento de Python fue más o menos un reemplazo directo del módulo de subprocesamiento, excepto que args debe ser seleccionable, pero estoy descubriendo que para no bloquear mi GUI, primero debo crear un nuevo subproceso con subprocesos . Luego subprocesamiento multiproceso dentro de ese subproceso con multiprocesamiento.Proceso. Esto funciona, y funciona bien, pero a mí me parece un poco torpe.

Si trato de multiprocesar directamente sin primero el subprocesamiento, entonces mi GUI aún se bloquea hasta que se complete el trabajo de multiprocesamiento. ¿Funciona como está diseñado o me falta algo fundamental sobre el módulo de multiprocesamiento?

Si se necesitan ejemplos, puedo proporcionarlos.

Gracias,

-RMWChaos

Se solicitó un ejemplo ...

Suponiendo que onProcess () es activado por un botón en la GUI, esto bloquea la GUI ...

import time
import multiprocessing as mp

def myWorker(a, b):
    time.sleep(0.1)
    print '{} * {} = {}'.format(a, b, a*b)

def onProcess(event):
    jobs = mp.cpu_count() * 2
    a = 5
    b = 10

    for job in range(jobs):
        mp.Process(target = myWorker, args = (a, b,)).start()

Si bien esto no ...

import time
import multiprocessing as mp
import threading as th

def myWorker(a, b):
    time.sleep(0.1)
    print '{} * {} = {}'.format(a, b, a*b)

def onProcess(event):
    a = 5
    b = 10
    th.Thread(target = myThread, args = [a, b,]).start()

def myThread(a, b):
    jobs = mp.cpu_count() * 2

    for job in range(jobs):
        mp.Process(target = myWorker, args = (a, b,)).start()

Respuestas a la pregunta(2)

Su respuesta a la pregunta