2

尝试从 wxpython GUI 运行耗时的任务。基本思想是从 GUI 启动长时间任务(按下按钮),然后应该从它更新对话框上的静态文本。

首先,我尝试了一些线程(http://wiki.wxpython.org/LongRunningTasks和许多其他资源),我想使用 Publisher.class 显示消息。进展并不顺利,一两条消息后,GUI 似乎冻结了。

现在我想通过多处理来实现这一点。我的“GUI”类中有这个方法:

        def do_update(self, e):
            self.txt_updatemsg.SetLabel("Don't stop this \n")
            ...

            pub = Publisher() # i tried also calling directly from dbob object
            # Publisher() is a singleton so this must be useless?
            pub.subscribe(self.__update_txt_message, ('updatedlg', 'message'))

            dbob = dbutils.DBUtils() # DBUtils is the class with 'long time' tasks
            dbob.publisher = pub

            p = Process(target=self.do_update_process, args=(dbob,))
            p.start()
            while p.is_alive:
                wx.Yield

        def do_update_process(self, dbob):
            dbob.do_update()

__update_txt_message 是一个简单的函数,用于在对话框中设置静态文本。

问题是:我怎样才能从这个过程中发回一些短信(只是简单的文本,这就是我所需要的)谢谢大家!

4

3 回答 3

3

Robin Dunn 在 wxpython 邮件列表中亲切地回答了我

pubsub 模块无法跨越进程边界。您需要使用多处理模块提供的类或其他一些进程间通信方法,在父进程和子进程之间进行通信。

所以我使用线程模块解决了我的问题。

于 2010-05-20T15:49:51.660 回答
1

标准方法是使用一个或多个 Queue 对象将数据来回传递给 multithreading.Process。它的工作方式或多或少与线程相同。

这是一个例子:http ://wiki.wxpython.org/MultiProcessing

于 2013-05-28T16:57:31.010 回答
0

wx.CallAfter(函数)

于 2010-05-18T13:20:30.510 回答