wxPython threading e multiprocessamento não-bloqueantes da GUI?

Python 2.7.3 x64 wxPython 2,8 x64

Estive lendo bastante sobre threading e multiprocessamento em python, particularmente alguns artigos de Doug Hellmann, que ajudaram tremendamente. No entanto, estou confuso sobre uma coisa ...

I pensamento o módulo de multiprocessamento Python era mais ou menos um substituto fácil para o módulo de encadeamento, com a exceção de que args devem ser selecionáveis, mas estou achando que para não bloquear minha GUI, primeiro preciso criar um novo encadeamento com encadeamento .Thread, em seguida, multiprocess dentro desse segmento com multiprocessamento.Processo. Isso funciona e funciona bem, mas parece um pouco confuso para mim.

Se eu tentar multiprocessar diretamente sem primeiro segmentar, então minha GUI ainda bloqueia até que o trabalho de multiprocessamento seja concluído. Isso funciona como projetado ou estou faltando algo fundamental sobre o módulo de multiprocessamento?

Se forem necessários exemplos, posso fornecê-los.

Obrigado,

-RMWChaos

Um exemplo foi solicitado ...

Assumindo que onProcess () é acionado por um botão na GUI, isso bloqueia a 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()

Enquanto isso não ...

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()

questionAnswers(2)

yourAnswerToTheQuestion