0

所以这是我的问题——

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

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

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

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

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

4

1 回答 1

0

如果我没记错的话,windows 会做“真正的”线程,在 Linux 线程中是进程。不同之处在于,普通线程共享相同的内存而进程不共享。

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

使用真正的分叉,如果没有明确说明,一切都是重复的。因此,您将获得更多针对锁定和竞争条件的保护。

只是我的初步猜测,有更深入了解的人随时纠正我。否则,我建议对您尝试操作的对象实施锁定。

于 2012-07-10T00:03:41.043 回答