Python论坛  - 讨论区

标题:[python-chinese] 请问用wxPython的多线程调用问题

2007年11月10日 星期六 22:12

Rodin schludern在gmail.com
星期六 十一月 10 22:12:40 HKT 2007

大家好!我在使用wxPython写一个 很简单的抓网页的工具,希望用多线程。

----基本流程----
目前程序流程是这样的:

 点击一个按钮,触发执行函数,在执行函数中调用一个threading.Thread的派生类

----部分代码----
按钮响应函数:

def onStart(self,event):
    self.task = DoThing(8)
    self.task.start()
    #self.task.join()   # 标记:(1)

线程派生类:
class DoThing(threading.Thread):

    def __init__(self,n):
        threading.Thread.__init__(self)
        self.max = n

    def run(self):
        while self.max:
            time.sleep(1)
            self.max -= 1
            print self.max
            # 由于执行函数需要执行比较长得时间,所以这里用time.sleep(1)来模拟,并用print
self.max来模拟执行过程中的日志输出

MyApp() 传入了参数:redirect=True

----问题描述----
标记1处有注释,在开始执行以后,子线程和主线程没有join起来,把窗体和redirect的stderr/stdout窗口关掉以后,子线程的
print self.max会在终端窗口中依次打印出来

标记1处如果取消注释,则在开始执行后,redirect的stderr/stdout窗口包括gui本身的窗体,都会暂停刷新,在
self.task 线程执行完毕以后才一股脑全部显示出来~

----我想要得效果----
执行onStart动作的时候,子线程执行,并同时在redirect的stderr/stdout窗体输出日志,作为父线程的wxpython 的 gui 正常显示。

---------

请各位高手指教~
谢谢啦~

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月10日 星期六 22:25

Jiahua Huang jhuangjiahua在gmail.com
星期六 十一月 10 22:25:48 HKT 2007

非 GUI 的处理随便怎么写都行,
Wx 的话,
记得在子线程里用 wx.CallAfter() 来调用更新 GUI 的动作,

Gtk 则用 gtk.idle_add()

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月11日 星期日 15:09

Rodin schludern在gmail.com
星期日 十一月 11 15:09:28 HKT 2007

明白了,就跟VB里面需要写一个函数以类似异步操作的方式刷新gui是一样的吧?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月11日 星期日 15:14

Jiahua Huang jhuangjiahua在gmail.com
星期日 十一月 11 15:14:20 HKT 2007

另一种方式是子线程在刷新 GUI 前先加锁,
完事后再解锁。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月11日 星期日 15:51

Rodin schludern在gmail.com
星期日 十一月 11 15:51:27 HKT 2007

这样是为了在防止多子线程之间同时写入数据的覆盖是吧?

谢谢,我试试先~

2007/11/11, Jiahua Huang <jhuangjiahua在gmail.com>:
> 另一种方式是子线程在刷新 GUI 前先加锁,
> 完事后再解锁。
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年11月11日 星期日 17:00

Rodin schludern在gmail.com
星期日 十一月 11 17:00:25 HKT 2007

正在看wxPython的demo: Threads.py,慢慢理解中~

谢谢 Jiahua Huang
若未脱光:
    祝早日脱光
否则:
    祝快乐



在 07-11-11,Rodin<schludern在gmail.com> 写道:
> 这样是为了在防止多子线程之间同时写入数据的覆盖是吧?
>
> 谢谢,我试试先~
>
> 2007/11/11, Jiahua Huang <jhuangjiahua在gmail.com>:
> > 另一种方式是子线程在刷新 GUI 前先加锁,
> > 完事后再解锁。
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号