Python线程 - 更新GUI时崩溃

时间:2012-07-09 22:54:16

标签: python multithreading macos

所以这是我的问题 -

我正在使用wx python创建一个python GUI应用程序。单击过程按钮后,会在幕后进行一些文件创建/编码。最初,这在GUI工作时冻结了一切,所以我决定在一个单独的线程上进行文件创建/编码 - 这就是擦除,只要创建线程的方法完成 - (相对较快)以下是实际创建线程的代码:

for audiobook in AudioBookObjects:
        thread.start_new(self.createSingleBook, tuple([audiobook]))

所以这是奇怪的部分 - 在一台机器上,我使用这个代码让一个线程去,完成并回来而不冻结gui。在另一台机器上,它很快就会射出两个线程,并在它们终止时崩溃!有什么东西会改变操作系统之间的线程行为吗?我使用相同版本的python。我绝对肯定。

基本上,我需要知道两件事:在创建它们的方法结束后python线程发生了什么,以及如何构建一个不冻结的GUI,如果触发器方法必须坚持让线程优雅地结束!?

提前致谢!如果您需要更多信息,请告诉我

1 个答案:

答案 0 :(得分:0)

如果我记得正确的话,那么Windows确实会真正意义上的"线程,Linux线程中的进程。不同之处在于,普通线程共享相同的内存,而进程则没有。

我猜你的程序在win下崩溃并在linux下运行。如果我没有弄错的话,你的createSingleBook-threads很可能会访问同一个对象,而这个对象似乎没有锁保护。

如果没有明确说明,使用真正的分支,一切都会重复。因此,您可以获得更多防范锁定和竞争条件的保护。

只是我的初步猜测,任何有更深刻见解的人都可以随意纠正我。否则我会建议对你试图操纵的对象实施锁定。