【发布时间】:2014-07-10 16:15:53
【问题描述】:
我的 pyinstaller 和我的程序有问题。如果我启动我的脚本,一切运行正常,但如果我运行 exe,它会做一些奇怪的事情。
这段代码应该在显示一个框架时做一些事情,如果它完成了框架应该销毁。但是在exe中它不会创建任何东西,但是在一段时间后创建第二个主框架(在这个脚本中没有创建主框架,这只是在wxpython应用程序中发生)。 这是创建框架的代码:
# self is a wx.Frame
def handleInputs(self):
path = self.setSavePath() # setSavePath just takes a path from a fileDialog
if path:
self.dialog = WaitingDialog() # subclass of wx.MiniFrame
self.dialog.Show(True)
calcThread = threading.Thread(target=self.doStuff)
checkThread = threading.Thread(target=self.checkFinishing)
calcThread.start()
checkThread.start()
self.Disable()
def checkFinishing(self, thread):
while thread.is_alive():
pass
wx.CallAfter(self.closeFrame)
return True
def doStuff(self):
# do Stuff here
return True
def closeFrame(self):
self.dialog.Destroy()
self.Destroy()
所以,self.handleInputs() 被调用了,但是在应用程序中,doStuff() 中似乎没有做任何事情,然后创建了一个新的主框架。 您是否看到任何错误或知道为什么会发生这种情况?
【问题讨论】:
-
有关您如何使用 pyinstaller 的信息会有所帮助,一个 SSSCE (sscce.org) 也可以证明该问题。就目前而言,我无法使用您提供的内容重现您的行为。
-
另外,您是否在应用程序中的任何位置进行多处理?是否应该在
if __name__ == '__main__'块下的东西没有正确缩进? PyInstaller 的两次执行可能会产生奇怪的行为。 -
谢谢,现在解决了,问题是多处理。我现在删除了所有进程并使用线程,但现在它有点慢。对不起,如果我的例子有点不具体,昨天为时已晚:(下次我会记住它
-
现在找到了这个解决方案:pyinstaller.org/wiki/Recipe/Multiprocessing,但它比使用线程慢得多
-
我个人使用 py2exe 比使用 pyinstaller 运气好得多。 pyinstaller 中的两遍执行会降低性能,尤其是对于小型、快速运行的脚本。
标签: python multithreading wxpython pyinstaller