2007年11月10日 星期六 22:12
大家好!我在使用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 正常显示。 --------- 请各位高手指教~ 谢谢啦~
2007年11月10日 星期六 22:25
非 GUI 的处理随便怎么写都行, Wx 的话, 记得在子线程里用 wx.CallAfter() 来调用更新 GUI 的动作, Gtk 则用 gtk.idle_add()
2007年11月11日 星期日 15:09
明白了,就跟VB里面需要写一个函数以类似异步操作的方式刷新gui是一样的吧?
2007年11月11日 星期日 15:14
另一种方式是子线程在刷新 GUI 前先加锁, 完事后再解锁。
2007年11月11日 星期日 15:51
这样是为了在防止多子线程之间同时写入数据的覆盖是吧? 谢谢,我试试先~ 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
2007年11月11日 星期日 17:00
正在看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 >
Zeuux © 2025
京ICP备05028076号