wxPython nicht blockierende GUI-Threading UND Multiprozessing?

Python 2.7.3 x64 wxPython 2.8 x64

Ich habe viel über Python-Threading und Multiprocessing gelesen, insbesondere einige Artikel von Doug Hellmann, die enorm geholfen haben. Ich bin jedoch verwirrt über eine Sache ...

I habe gedacht Das Python-Multiprozessor-Modul war quasi ein Ersatz für das Threading-Modul, mit der Ausnahme, dass args picklable sein muss, aber ich stelle fest, dass ich zuerst einen neuen Thread mit Threading erstellen muss, um meine GUI nicht zu blockieren Thread und Multiprocess in diesem Thread mit Multiprocessing.Process. Das funktioniert und funktioniert gut, aber es scheint mir ein bisschen klug.

Wenn ich versuche, ohne vorheriges Threading direkt mehrere Prozesse auszuführen, wird meine GUI weiterhin blockiert, bis der Multiprozessor-Auftrag abgeschlossen ist. Funktioniert das wie geplant, oder fehlt mir etwas Grundlegendes am Multiprozessor-Modul?

Falls Beispiele benötigt werden, kann ich diese zur Verfügung stellen.

Vielen Dank,

-RMWChaos

Ein Beispiel wurde angefordert ...

Vorausgesetzt, dass onProcess () durch eine Schaltfläche in der GUI ausgelöst wird, blockiert dies die 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()

Während dies nicht ...

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage