2005年12月02日 星期五 15:29
程序如下: from Casing import * import time def test_A(n, syncvar): for i in range(1,n+1): if i==15: syncvar.clear() if syncvar: syncvar.set(i) print '=',i time.sleep(.5) else: break def process(syncvar): if syncvar: print 'process....', syncvar.get() else: print 'abort' d = Casing(test_A,10)+Casing(test_A,20) d.onprocess(process,timestep=2) d.start_sync_thread() time.sleep(20) print 'stop' 当运行到i==15时以后,process中的 print 'abort' 我看不到 是不是说syncvar被重置后,process就不被运行了?如果不被运行的话,为什么还要在process中判断syncvar呢?
2005年12月02日 星期五 16:03
在 05-12-2,Fat<fatbobman at gmail.com> 写道: > 程序如下: > from Casing import * > import time > > def test_A(n, syncvar): > for i in range(1,n+1): > if i==15: > syncvar.clear() > if syncvar: > syncvar.set(i) > print '=',i > time.sleep(.5) > else: > break > > def process(syncvar): > if syncvar: > print 'process....', syncvar.get() > else: > print 'abort' > > > d = Casing(test_A,10)+Casing(test_A,20) > d.onprocess(process,timestep=2) > d.start_sync_thread() > > time.sleep(20) > print 'stop' > > 当运行到i==15时以后,process中的 print 'abort' 我看不到 > 是不是说syncvar被重置后,process就不被运行了?如果不被运行的话,为什么还要在process中判断syncvar呢? > 这个例子中,因为process执行非常简单。而Casing并不是强制线程停止(不知道如何做),因此只是置相应的标志。由各个函数自已去停止。在process中判断syncvar的状态只是一种做法,如果process的处理很复杂,那么判断要不要退出是必要的。但象上面的例子因为process执行完就结束,因此的确是没必要进行判断。这只是我写的例子。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年12月02日 星期五 16:17
在 05-12-2,limodou<limodou at gmail.com> 写道: > 这个例子中,因为process执行非常简单。而Casing并不是强制线程停止(不知道如何做),因此只是置相应的标志。由各个函数自已去停止。在process中判断syncvar的状态只是一种做法,如果process的处理很复杂,那么判断要不要退出是必要的。但象上面的例子因为process执行完就结束,因此的确是没必要进行判断。这只是我写的例子。 我的意思是是否在 bool(syncvar)==false 的情况下,process就不被执行了。
2005年12月02日 星期五 21:37
> 我的意思是是否在 bool(syncvar)==false 的情况下,process就不被执行了。 > 在调度的 ProcessThread线程是这样处理的: while 1: if self.syncvar: if self.sync: kwargs['syncvar'] = self.syncvar func(*args, **kwargs) time.sleep(timestep) else: break 可以看到,当syncvar为false时,就自动跳出了。的确不会执行process。但这种情况是在process已经执行完成一次,在等待下次运行时才会出现。如果process运行时间很长,此时syncvar的值变为False,而process还没有退出来,则这时如果process本身主动判断syncvar 的状态,然后退出效果要好一些。不然只有等process执行完毕,才能真正的退出。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年12月02日 星期五 21:42
在 05-12-2,limodou<limodou at gmail.com> 写道: > > 我的意思是是否在 bool(syncvar)==false 的情况下,process就不被执行了。 > > > > 在调度的 ProcessThread线程是这样处理的: > > while 1: > if self.syncvar: > if self.sync: > kwargs['syncvar'] = self.syncvar > func(*args, **kwargs) > time.sleep(timestep) > else: > break > > 可以看到,当syncvar为false时,就自动跳出了。的确不会执行process。但这种情况是在process已经执行完成一次,在等待下次运行时才会出现。如果process运行时间很长,此时syncvar的值变为False,而process还没有退出来,则这时如果process本身主动判断syncvar > 的状态,然后退出效果要好一些。不然只有等process执行完毕,才能真正的退出。 > 了解了,多谢。另外blog上我还问了一个问题 有没有办法知道multicasing中正在运行的casing数量。 或者说没有运行的,但在multicasing中等待被调度的casing数量 ps:今天的donews好像有问题。我的评论在,但在你首页上看不到有评论。 blogspot又不好用了,逼得我只好又搬家回donews 。。什么世道呀
Zeuux © 2025
京ICP备05028076号