Python 2.7.3 x64 wxPython 2.8 x64
Pythonのスレッド化とマルチプロセッシング、特にDougHellmannによるいくつかの記事をかなり読んでいます。しかし、私は1つのことについて混乱しています...
Pythonマルチプロセッシングモジュールは、引数が選択可能でなければならないことを除いて、多かれ少なかれスレッドモジュールのドロップイン代替品だと思いましたが、GUIをブロックしないために、最初に新しいスレッドを作成する必要があることがわかりましたthreading.Threadを使用してから、そのスレッド内でmultiprocessing.Processを使用してマルチプロセスを実行します。これは機能し、うまく機能しますが、私には少し厄介なようです。
最初にスレッド化せずに直接マルチプロセッシングを行おうとすると、マルチプロセッシングジョブが完了するまでGUIはブロックされます。それは設計どおりに機能していますか、それともマルチプロセッシングモジュールの基本的な何かが欠けていますか?
例が必要な場合は、提供できます。
ありがとう、
-RMWChaos
例がリクエストされました...
onProcess()がGUIのボタンによってトリガーされると仮定すると、これは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()
これはしませんが...
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()