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号