我的一些方法涉及到os.chdir。在多線程中使用時,chdir會相互影響。wxPython中的multiprocessing apply_async塊GUI
所以我嘗試multiprocess.Pool調用這些方法在不同的過程中,它的工作。直到我在GUI中調用這些方法。
在wxPython中使用multiprocessing.Pool時,使用apply_async調用的方法仍會凍結GUI,如何解決此問題?
class MyFrame(wx.Frame):
def __init__(self):
super(MyFrame, self).__init__(None, -1, 'My Frame', size=(500, 300))
self.pool = multiprocessing.Pool(maxtasksperchild=1)
panel = wx.Panel(self, -1)
self.screen = wx.TextCtrl(panel, -1, '', size=(500, 200), style=wx.TE_MULTILINE | wx.TE_READONLY)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.screen, flag=wx.EXPAND)
vbox.Add(wx.Button(panel, 1, label='Block'), flag=wx.BOTTOM)
vbox.Add(wx.Button(panel, 2, label='Non-Block'), flag=wx.BOTTOM)
panel.SetSizer(vbox)
self.Bind(wx.EVT_BUTTON, self.onBlock, id=1)
self.Bind(wx.EVT_BUTTON, self.onNonBlock, id=2)
def onNonBlock(self, event):
self.pool.apply_async(self.long_job(4))
def onBlock(self, event):
self.long_job(4)
def callback(self, x):
self.screen.WriteText('callback %s\n' % x)
def long_job(self, x):
self.screen.WriteText('enter %s\n' % x)
for i in range(x):
self.screen.WriteText('running %s\n' % i)
os.chdir('dir_%s' % x)
time.sleep(1)
self.screen.WriteText('exit %s\n' % x)
你最近怎麼樣?下面我的回答有幫助嗎? – GreenAsJade