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号