wxPython неблокирующая многопоточность GUI и многопроцессорность?
Python 2.7.3 x64 wxPython 2.8 x64
Я читал немало о потоке Python и многопроцессорности, особенно о некоторых статьях Дуга Хеллмана, которые очень помогли. Тем не менее, я запутался в одном ...
яthought модуль многопроцессорной обработки Python был более или менее заменой модуля потоков, за исключением того, что аргументы должны выбираться, но я обнаружил, что для того, чтобы не блокировать мой графический интерфейс, сначала необходимо создать новый поток с потоками Затем выполните многопроцессорную обработку в этом потоке с помощью многопроцессорной обработки. Процесс. Это работает и работает хорошо, но мне кажется, что это немного глупо.
Если я попытаюсь выполнить многопроцессорную обработку напрямую без первой многопоточности, мой графический интерфейс по-прежнему блокируется до тех пор, пока не будет завершена многопроцессорная работа. Это работает как задумано, или я упускаю что-то фундаментальное в модуле многопроцессорности?
Если нужны примеры, я могу их предоставить.
Спасибо,
-RMWChaos
Пример был запрошен ...
Предполагая, что onProcess () запускается кнопкой в графическом интерфейсе, это блокирует графический интерфейс ...
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()
Хотя это не ...
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()