【发布时间】:2012-06-11 17:25:34
【问题描述】:
Python 2.7.3 x64 wxPython 2.8 x64
阅读了大量有关 python 线程和多处理的文章,尤其是 Doug Hellmann 的一些文章,这些文章帮助很大。但是,我对一件事感到困惑......
我认为 Python 多处理模块或多或少是线程模块的替代品,除了 args 必须是可腌制的,但我发现这是为了不阻塞我的 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()
【问题讨论】:
-
也许你应该添加一个小例子来描述你的问题。
标签: python multithreading wxpython multiprocessing nonblocking