Python论坛  - 讨论区

标题:[python-chinese] 有关Casing 中Syncvar的问题

2005年12月02日 星期五 15:29

Fat fatbobman at gmail.com
Fri Dec 2 15:29:13 HKT 2005

程序如下:
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呢?

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 16:03

limodou limodou at gmail.com
Fri Dec 2 16:03:42 HKT 2005

在 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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 16:17

Fat fatbobman at gmail.com
Fri Dec 2 16:17:48 HKT 2005

在 05-12-2,limodou<limodou at gmail.com> 写道:

> 这个例子中,因为process执行非常简单。而Casing并不是强制线程停止(不知道如何做),因此只是置相应的标志。由各个函数自已去停止。在process中判断syncvar的状态只是一种做法,如果process的处理很复杂,那么判断要不要退出是必要的。但象上面的例子因为process执行完就结束,因此的确是没必要进行判断。这只是我写的例子。

我的意思是是否在 bool(syncvar)==false 的情况下,process就不被执行了。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 21:37

limodou limodou at gmail.com
Fri Dec 2 21:37:01 HKT 2005

> 我的意思是是否在 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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月02日 星期五 21:42

Fat fatbobman at gmail.com
Fri Dec 2 21:42:54 HKT 2005

在 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 。。什么世道呀

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号