2

wxpython GUI から時間のかかるタスクを実行しようとしています。基本的な考え方は、GUI から (ボタンを押して) 長時間のタスクを開始し、ダイアログの静的テキストを GUI から更新することです。

まず、いくつかのスレッド ( http://wiki.wxpython.org/LongRunningTasksおよび他の多くのリソースが表示されます) を試しました。Publisher.class を使用してメッセージを表示したいと思います。うまくいきませんでした。1 つか 2 つのメッセージの後、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

RobinDunnがwxpythonメーリングリストで親切に答えてくれました

pubsubモジュールはプロセスの境界を越えることができません。親プロセスと子プロセスの間で通信するには、マルチプロセッシングモジュールまたはその他のプロセス間通信メソッドによって提供されるクラスを使用する必要があります。

そこで、スレッドモジュールを使用して問題を修正しました。

于 2010-05-20T15:49:51.660 に答える
0

wx.CallAfter(関数)

于 2010-05-18T13:20:30.510 に答える