Python论坛  - 讨论区

标题:[python-chinese] 怎样stop thread?

2006年09月29日 星期五 13:45

Eric CHAO lionchao在gmail.com
星期五 九月 29 13:45:34 HKT 2006

比如我新建了10个thread
放在一个list里面
300秒钟以后统统都kill掉?

在windows下面,主thread推出,其他的thread竟然还在运行。
而且即使主thread调用sys.exit()也没有用。
我试过thread1.join(timeout)没有用,timeout没起作用。

这怎么办?我google到有人说python里面没有停掉进程的东西,是这样的么?
谢谢。
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20060929/482fb74d/attachment.html 

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

2006年09月29日 星期五 14:13

limodou limodou在gmail.com
星期五 九月 29 14:13:02 HKT 2006

On 9/29/06, Eric CHAO <lionchao在gmail.com> wrote:
> 比如我新建了10个thread
> 放在一个list里面
> 300秒钟以后统统都kill掉?
>
> 在windows下面,主thread推出,其他的thread竟然还在运行。
> 而且即使主thread调用sys.exit()也没有用。
> 我试过thread1.join(timeout)没有用,timeout没起作用。
>
> 这怎么办?我google到有人说python里面没有停掉进程的东西,是这样的么?
>  谢谢。
>
是的。线程要停掉目前比较好的方式是设一个标志,然后线程在运行时经常去查一查这个标志。再有如果想在主线程退出时,所有线程自动停掉,可以在创建线程对象后,调用setDaemon(True)将线程设置为Daemon,这样当主线程退出时,所有线程自动结束。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

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

2006年09月30日 星期六 09:37

163 hailang_0512在163.com
星期六 九月 30 09:37:38 HKT 2006

¶Þiا8ky§lzÐÚzj'u§¦¢qÓ0µ.m§ÿéÊØhÉÿ¦*^®f¢—úr¶'r§zÇ¿jÛZržžÛ?ÛM:ÓÝôý÷[q֚ëö­µ§!™éí†Ù¥

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

2006年09月30日 星期六 16:28

3751 lwm3751在gmail.com
星期六 九月 30 16:28:44 HKT 2006

当你import threading的时候会注册一个函数在程序退出的时候调用。那个函数的功能是join所有的不是daemon的且尚未结束的线程。join函数是等待线程自己退出,并不是说你join了,它就会退出,而你的线程我估计都是死循环的,死循环的线程是不会自己退出的。如果你想要将让它们退出有两个办法:
1在它们运行前将它们设定未daemon,这样在主线程结束的时候,就不必等它们。
2修改实现代码,让它们在满足某些条件的时候退出。
再说一次,join只是等等线程退出,并不强迫线程退出,如果线程不退出它也没办法。那个timeout只是表示你愿意等待的时间,时间过后就不再等待。注意threading里面注册的那个函数是没有设定timeout的,也就是一直等,等到那些子线程自己退出。

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

2006年09月30日 星期六 16:38

Eric CHAO lionchao在gmail.com
星期六 九月 30 16:38:01 HKT 2006

我在线程作的事情是下载一个url列表中的文件,所以分几个线程进行。
如果遇到网络问题,线程本身就会卡在某个语句上,而不是死循环造成无法退出。
所以我想在主线程中使用timeout,在合时的时间推出。
setdaemon是什么意思呀?看文档都有点看不懂,daemon是那种持续驻留的程序么?像apache一样的那种?
如果要达到我的目的,setdaemon为true还是false?

On 9/30/06, 3751 <lwm3751 at gmail.com> wrote:
>
> 当你import
> threading的时候会注册一个函数在程序退出的时候调用。那个函数的功能是join所有的不是daemon的且尚未结束的线程。join函数是等待线程自己退出,并不是说你join了,它就会退出,而你的线程我估计都是死循环的,死循环的线程是不会自己退出的。如果你想要将让它们退出有两个办法:
> 1在它们运行前将它们设定未daemon,这样在主线程结束的时候,就不必等它们。
> 2修改实现代码,让它们在满足某些条件的时候退出。
>
> 再说一次,join只是等等线程退出,并不强迫线程退出,如果线程不退出它也没办法。那个timeout只是表示你愿意等待的时间,时间过后就不再等待。注意threading里面注册的那个函数是没有设定timeout的,也就是一直等,等到那些子线程自己退出。
> _______________________________________________
> python-chinese
> Post: send python-chinese at lists.python.cn
> Subscribe: send subscribe to python-chinese-request at lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://python.cn/pipermail/python-chinese/attachments/20060930/6bf7067a/attachment.html 

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

2006年09月30日 星期六 16:41

麦田守望者 qcxhome在gmail.com
星期六 九月 30 16:41:44 HKT 2006

timeout最好放在每个线程中。结束线程生命的最好方式就是让它完成工作后,自然结束。

-- 
GoogleTalk: qcxhome at gmail.com
MSN: qcxhome at hotmail.com
My Space: tkdchen.spaces.live.com
BOINC: boinc.berkeley.edu
中国分布式计算总站: www.equn.com

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号