2005年04月21日 星期四 17:05
---------- Forwarded message ---------- From: limodou <limodou at gmail.com> Date: 2005-4-21 下午5:04 Subject: Re: [python-chinese] 有没有好的 方法强制结束一 个?叱蹋? size=100 maxlength=80 style= To: Qiangning Hong <hongqn at gmail.com> 如果在执行timeout之前没有别的deamon的线程的话,这个方法其实还是可以的。 那有没有可能在执行timeout之前先全部把deamon线程改为非deamon,然后超时后再改回来。不过的确不是一个好方法。 在05-4-21,Qiangning Hong<hongqn at gmail.com> 写道: > 拜读了一下,没有缩进真是让人很头疼。用vmware的win2k+ie也不行。 > > shhgs说: > > > > 如果你对线程比较熟悉,这个问题应该是一点就通的,如果不熟悉,那就比较麻烦了。Python的文档根本帮不了你,那是给已经很熟悉线程的人准备的。不过不管是哪种语言,线程基本上大同小异,你可以找本书看看。 > > > > > > 这里关键就是把真正调用程序的线程设成daemon的,然后当主线程,也就是控制时间同时又调用函数的那个线程sleep足时间退出之后,daemon线程自然就中止了。 > > > > 其实用setDaemon不能从根本上解决timeout的问题,我觉得是shhgs本人没有仔细看python的文档。 > python的文档上说:The entire Python program exits when no active non-daemon > threads are left. > 意思是说python进程在所有非daemon线程结束后退出。daemon线程的中止是由于python进程的结束,而非调用其的线程(父线程)结束。在python主线程退出之前,daemon线程还是在一直跑着的。 > > 我把shhgs的例子稍微改了一下,可以看得更明白些。在function里增加了输出,可以看到线程是否在运行;把两次测试颠倒一下次序,先测试超时的,再测试不超时的。 > > import threading, time > import sys > > TimeoutError = "" > > def function(args = [], kwargs = {}) : > z = 1 > if len(args) != 0 : > n = args[0] > else : > n = 10 > indicator = kwargs.get('indicator', '.') > while z < n : > z += 1 > time.sleep(0.5) > sys.stdout.write(indicator) > sys.stdout.flush() > return z > > class FuncWrapper(object) : > def __init__(self, func, args, kwargs) : > self.func = func > self.args = args > self.kwargs = kwargs > self.hasReturn = False > > def execute(self) : > self.result = self.func(self.args, self.kwargs) > self.hasReturn = True > > class Timeout(threading.Thread) : > def __init__(self, timeout, func) : > threading.Thread.__init__(self) > self.timeout = timeout > self.func = func > self.subThread = threading.Thread(target = self.func.execute) > self.subThread.setDaemon(True) > > def run(self) : > self.subThread.start() > time.sleep(self.timeout) > if not self.func.hasReturn : > raise "TimeoutError" > > > if __name__ == "__main__" : > funcobj = FuncWrapper(function, [1000,], {}) > try : > t = Timeout(5, funcobj) > t.run() > print funcobj.result > except : > print "Not completed in given time!" > > funcobj = FuncWrapper(function, [5, ], {'indicator': '*'}) > try : > t = Timeout(5, funcobj) > t.run() > print funcobj.result > except : > print "Not completed in given time!" > > > 运行结果如下: > > hongqn at gentoo tmp $ python test.py > ..........Not completed in given time! > .*.*.*.*......5 > > 可以看出,虽然第一次测试已经输出超时信息,但这个function还是在继续运行的(用"."表示)。 > > 倒是xyzxyz1111的提议靠些谱,启一个定时器,到时间通过PyThreadState_SetAsyncExc给工作线程发一个exception。 > > Ruby的线程机制是在语言基础上实现的,Python的线程是在操作系统上层包装的。但不管是哪一个,都不可能强行中断C调用,至少也要等到调用返回才 > 能进入语言层次。因此对于贴主询问的驱动API调用超时问题,python线程恐怕无能为力,而要从操作系统考虑,用杀死进程或杀死操作系统线程(不是 > python线程)的方法来实现。杀死进程相对容易实现一些,而在python中通过OS > API直接操作线程,还请有经验的人来讲讲。 > > > > > On 4/21/05, limodou <limodou at gmail.com> wrote: > > 看这个贴子: > > > > > http://community.csdn.net/Expert/TopicView3.asp?id=3688365 > > > > 在05-4-21,Qiangning Hong<hongqn at gmail.com > 写道: > > > API不让你timeout出来,你就没有办法timeout出来…… > > > 你可以试着另起一个进程包含此API操作,然后时间到了就kill process。 > > > > > > > > > On 4/21/05, kanchy kang <zzhikang at hotmail.com> wrote: > > > > > > > > csdn上我查了一下,好象没有找到,在其它论坛上,似乎有个timeout处理,但是是在unix平台上 > > > > 而我现在是windows平台。 > > > > 另外,就是不知道怎样让访问驱动的API timeout 出来。。。 > > > > > > > > >From: limodou < limodou at gmail.com> > > > > >Reply-To: limodou < limodou at gmail.com>, > python-chinese at lists.python.cn > > > > >To: python-chinese at lists.python.cn > > > > >Subject: Re: [python-chinese] 有没有好的 方法强制结束一个?叱蹋?>Date: Wed, > > > > >20 Apr 2005 12:53:45 +0800 > > > > > > > > > >在csdn以前讨论过这个问题,你可以去找一找。关于 timeout的实现。 > > > > > > > > > >在05-4-20,kanchy kang< zzhikang at hotmail.com> 写道: > > > > > > 我有一个程序,它创建一个线程来调用一个任务, > > > > > > 该任务中,有一个访问驱动的函数, > > > > > > 比如执行一个访问驱动的操作, > > > > > > A = Func(....)//这个函数不能拆解进去 > > > > > > 现在有可能这个访问操作死掉了(没有返回),线程就一直等待在哪儿, > > > > > > 我需要,设定一个时间,比如10秒,超过了就强行终止程序,。 > > > > > > 或者,干脆,创建一个按钮,在需要时结束该运行线程, > > > > > > > > > > > > 请问有方法实现吗? > > > > > > > > > > > > >From: limodou <limodou at gmail.com > > > > > > > >Reply-To: limodou < limodou at gmail.com>, > > > python-chinese at lists.python.cn > > > > > > >To: python-chinese at lists.python.cn > > > > > > >Subject: Re: [python-chinese] 请教各位一 个Text加颜色的问题 > > > > > > >Date: Tue, 19 Apr 2005 17:28:40 +0800 > > > > > > > > > > > > > >如果使用StyledTextCtrl就要仔细研究文档了,说起来比较复杂。 NewEdit 中 > > > > > > >有实现,许多基于wxPython的编辑器都有实现。 > > > > > > > > > > > > > >在05-4-19,kanchy kang< zzhikang at hotmail.com> 写道: > > > > > > > > > > > > > > > > > > > >我查看了一下,但是并没有发现自定义关键值得颜色,我举例"---〉"等,并非就一定是这个关键字。。。 > > > > > > > > > > > > > > > > > > > > _________________________________________________________________ > > > > > > > > Don抰 just search. Find. Check out the new MSN Search! > > > > > > > > > > > > http://search.msn.click-url.com/go/onm00200636ave/direct/01/ > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > > > python-chinese list > > > > > > > > python-chinese at lists.python.cn > > > > > > > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > > > > > > > > > >-- > > > > > > >I like python! > > > > > > >My Donews Blog: http://www.donews.net/limodou > > > > > > >My Sina Blog: > > > http://blog.sina.com.cn/blog/1148608914 > > > > > > >New Google Maillist: > > > http://groups-beta.google.com/group/python-cn > > > > > > >_______________________________________________ > > > > > > >python-chinese list > > > > > > >python-chinese at lists.python.cn > > > > > > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > ----------------------------------------------- > > > > > > Best regards, > > > > > > kangzz > > > > > > > > > > > > mailto: zzhikang at hotmail.com > > > > > > Tel : 021-65407754 > > > > > > MP: 13916928084 > > > > > > > > > > > > > > > > _________________________________________________________________ > > > > > > Express yourself instantly with MSN Messenger! Download today - > it's > > > > >FREE! > > > > > > > > > > http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/ > > > > > > > > > > > > _______________________________________________ > > > > > > python-chinese list > > > > > > python-chinese at lists.python.cn > > > > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > > > > > >-- > > > > >I like python! > > > > >My Donews Blog: http://www.donews.net/limodou > > > > >My Sina Blog: > http://blog.sina.com.cn/blog/1148608914 > > > > >New Google Maillist: > > > http://groups-beta.google.com/group/python-cn > > > > >_______________________________________________ > > > > >python-chinese list > > > > >python-chinese at lists.python.cn > > > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > ----------------------------------------------- > > > > Best regards, > > > > kangzz > > > > > > > > mailto: zzhikang at hotmail.com > > > > Tel : 021-65407754 > > > > MP: 13916928084 > > > > > > > > > > > > _________________________________________________________________ > > > > Is your PC infected? Get a FREE online computer virus scan from > McAfee� > > > > Security. > > > > http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963 > > > > > > > > _______________________________________________ > > > > python-chinese list > > > > python-chinese at lists.python.cn > > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > > > > -- > > > Qiangning Hong > > > Get Firefox! < > > > > http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1> > > > > > > _______________________________________________ > > > python-chinese list > > > python-chinese at lists.python.cn > > > http://python.cn/mailman/listinfo/python-chinese > > > > > > > > > > > > > -- > > I like python! > > My Donews Blog: http://www.donews.net/limodou > > My Sina Blog: http://blog.sina.com.cn/blog/1148608914 > > New Google Maillist: > http://groups-beta.google.com/group/python-cn > > > > > > -- > Qiangning Hong > Get Firefox! > <http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1 > > > -- I like python! My Donews Blog: http://www.donews.net/limodou My Sina Blog: http://blog.sina.com.cn/blog/1148608914 New Google Maillist: http://groups-beta.google.com/group/python-cn -- I like python! My Donews Blog: http://www.donews.net/limodou My Sina Blog: http://blog.sina.com.cn/blog/1148608914 New Google Maillist: http://groups-beta.google.com/group/python-cn
2005年04月21日 星期四 17:17
On 4/21/05, limodou <limodou at gmail.com> wrote: > > 如果在执行timeout之前没有别的deamon的线程的话,这个方法其实还是可以的。 也不行。除非你一timeout就退出程序,daemon线程才会实现到超时时停止工作的功能,否则这个线程就要一直跑下去。要不就是用 xyzxyz1111的方法在超时时从外部给线程发一个异常,或者通过设置flag变量的方法,在工作线程中不停查询该变量的值,来使工作线程终止。不过 这样的话,工作线程是不是daemon的就无关紧要了。 那有没有可能在执行timeout之前先全部把deamon线程改为非deamon,然后超时后再改回来。不过的确不是一个好方法。 setDaemon必须在调用start之前调用,不能在线程运行后设置。 -- Qiangning Hong Get Firefox! < http://www.spreadfirefox.com/?q=affiliates&id=67907&t=1> -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050421/817c0982/attachment.html
2005年04月21日 星期四 19:45
ÔÚÎҵijÌÐòÀÎÒÆô¶¯Ò»¸öÏß³ÌÀ´ÔËÐÐÒ»¸öÈÎÎñ£¬ ÎÒÐèÒªÉèÖÃÖжϸÃÈÎÎñµÄ¹¦ÄÜ£¬ÓÚÊÇÎҾͣº def thread_run(self,cases,f): r = Runtest(self.config,cases,self.runStatusCallBack,self.runBtnCallBack,f) r.setDaemon(True) r.start() while r.isAlive(): if self.terminate: self.terminate = False break time.sleep(2) def RunCase(self,cases,btn): self.thread_run(self,cases,f): ÓÚÊÇ£¬ÎÒµÄÏë·¨ÊÇ£¬Èç¹ûÏëÖÕÖ¹¸ÃỊ̈߳¬¾Í°Ñself.terminate == True¡£ ÏÖÔÚµÄÎÊÌâÊÇ£¬Í¨¹ýÕâÖÖ·½Ê½ÖжÏrỊ̈߳¬rÏß³ÌÀï»áÅ׳öһЩÒì³££¬ ¶øÕâЩÒì³££¬ÎÒûÓа취ץµ½¡£ ÇëÎÊ£¬Óкõķ½·¨Â𣿣¨ÄÜץסÒì³£Ò²¿ÉÒÔ£© лл¡£ _________________________________________________________________ Dont just search. Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/
Zeuux © 2025
京ICP备05028076号