我正在使用 Python 和 wx Simple Wizard 开发一个项目。在我的向导中,当移动到第四页也是最后一页时,它会启动一个名为beginCreateInstallation()
. 这反过来为文件副本创建了一个单独的线程(以及其他一些次要细线),但也使向导线程保持活动状态。
这是方法:
def beginCreateInstallation(self, parent):
'''Install the files to the drive. We need to do this
in a thread so the gui continues to update.
'''
#Disable the buttons so they can't move.
wx.FindWindowById(wx.ID_BACKWARD).Disable()
wx.FindWindowById(wx.ID_FORWARD).Disable()
#Start the thread
#from installer import createInstall
createInstallThread = threading.Thread(target=self.Installer.createInstall, args=[parent, self.selectedDrive])
createInstallThread.setDaemon(True)
try: createInstallThread.start()
except: print "Boom goes the dynamite."
运行的线程是Installer.createInstall
. 最后createInstall()
,它调用原始类中的一个方法installComplete()
。
所以,在线程结束时,它调用了父级的一个方法,然后应该死掉。
这在 Windows 上运行良好,但在 OSX 上出现总线错误和“内核保护错误”。
beginCreateInstall()
如果我杀死线程,并将以下行添加到我添加这些行的底部:
createInstallThread.join()
self.installComplete()
这反过来会杀死线程并冻结向导,但我没有收到总线错误。
有什么帮助让这个线程工作吗?我在哪里可以让线程在 OSX 上工作?