2006年04月15日 星期六 01:16
Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as a ``daemon thread''. The significance of this flag is that the entire Python program exits when only daemon threads are left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, 似乎就没执行.有人能告诉我setDaemon的作用么? 我的程序如下: import threading def f(str): for x in xrange(100000): print str def main(): t=threading.Thread(target=f,args=('1')) t.start() import time time.sleep(1) t=threading.Thread(target=f,args=('2')) t.setDaemon(True) t.start() main() 程序根本不输出'2' -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/5f5c6aa1/attachment.html
2006年04月15日 星期六 09:28
在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as a ``daemon > thread''. The significance of this flag is that the entire Python program > exits when only daemon threads are > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > 似乎就没执行.有人能告诉我setDaemon的作用么? > 我的程序如下: > > import threading > def f(str): > for x in xrange(100000): > print str > > > def main(): > t=threading.Thread(target=f,args=('1')) > t.start() > import time > time.sleep(1) > t=threading.Thread(target=f,args=('2')) > t.setDaemon(True) > t.start() > main() > > 程序根本不输出'2' > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 你在t.start()后面加上 import time time.sleep(0.5) 试试。 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/d8acde86/attachment-0001.html
2006年04月15日 星期六 10:14
setDaemon主要是用来作子线程的 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > a ``daemon thread''. The significance of this flag is that the entire Python > program exits when only daemon threads are > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出,似乎就没执行.有人能告诉我setDaemon的作用么? > > 我的程序如下: > > > > > > import threading > > def f(str): > > for x in xrange(100000): > > print str > > > > > > def main(): > > t=threading.Thread(target=f,args=('1')) > > t.start() > > import time > > time.sleep(1) > > t=threading.Thread(target=f,args=('2')) > > t.setDaemon(True) > > t.start() > > main() > > > > 程序根本不输出'2' > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > 你在t.start()后面加上 > > import time > time.sleep(0.5) > > 试试。 > > _______________________________________________ > 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 > >
2006年04月15日 星期六 10:55
在06-4-15,shhgs <shhgs.efhilt at gmail.com> 写道: > > setDaemon主要是用来作子线程的 > > 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 > > 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 > > On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > > > > > 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > > > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > > a ``daemon thread''. The significance of this flag is that the entire > Python > > program exits when only daemon threads are > > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > 似乎就没执行.有人能告诉我setDaemon的作用么? > > > 我的程序如下: > > > > > > > > > import threading > > > def f(str): > > > for x in xrange(100000): > > > print str > > > > > > > > > def main(): > > > t=threading.Thread(target=f,args=('1')) > > > t.start() > > > import time > > > time.sleep(1) > > > t=threading.Thread(target=f,args=('2')) > > > t.setDaemon(True) > > > t.start() > > > main() > > > > > > 程序根本不输出'2' > > > > > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > > > 你在t.start()后面加上 > > > > import time > > time.sleep(0.5) > > > > 试试。 > > > > _______________________________________________ > > 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 > > > > > > _______________________________________________ > 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 > > 你在程序中加个t.join()就搞定了, t.setDaemon(True)的作用是使子线程听主线程的,就使说主线程死了,他的子线程就必须结束。 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/61db55d2/attachment.htm
2006年04月15日 星期六 12:49
请看py2.4中的解释,清楚很多。 *setDaemon*( daemonic) Set the thread's daemon flag to the Boolean value daemonic. This must be called before start() is called. The initial value is inherited from the creating thread. The entire Python program exits when no active non-daemon threads are left. 在06-4-15,Pau Lau <paulau591 at gmail.com> 写道: > > > > 在06-4-15,shhgs <shhgs.efhilt at gmail.com> 写道: > > > setDaemon主要是用来作子线程的 > > > > 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 > > > > 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 > > > > On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > > > > > > > > > 在06-4-15,bird devdoer <devdoer at gmail.com > 写道: > > > > > > > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > > > a ``daemon thread''. The significance of this flag is that the entire > > Python > > > program exits when only daemon threads are > > > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > > > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > > 似乎就没执行.有人能告诉我setDaemon的作用么? > > > > 我的程序如下: > > > > > > > > > > > > import threading > > > > def f(str): > > > > for x in xrange(100000): > > > > print str > > > > > > > > > > > > def main(): > > > > t=threading.Thread(target=f,args=('1')) > > > > t.start() > > > > import time > > > > time.sleep(1) > > > > t=threading.Thread(target=f,args=('2')) > > > > t.setDaemon(True) > > > > t.start() > > > > main() > > > > > > > > 程序根本不输出'2' > > > > > > > > > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > > > > > 你在t.start()后面加上 > > > > > > import time > > > time.sleep (0.5) > > > > > > 试试。 > > > > > > _______________________________________________ > > > 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 > > > > > > > > > > _______________________________________________ > > 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 > > > > 你在程序中加个t.join()就搞定了, t.setDaemon > (True)的作用是使子线程听主线程的,就使说主线程死了,他的子线程就必须结束。 > > > > _______________________________________________ > 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/52f157ef/attachment.html
2006年04月15日 星期六 13:39
谢谢各位的关注~ 主线程没退出,我用t.join(),还有time.sleep()都试过,还是这样. 另外,我的程序中有另一个线程在不停的输出'1'的,证明程序并没有退出. Python的主线程即使不调用t.join()也不会退出.我发现 只有调用了setDaemon的线程没有执行. 说这么多,把代码亲自运行一下看看就知道了,不知道是不是平台的原因. 在06-4-15,Pau Lau <paulau591 at gmail.com> 写道: > > > > 在06-4-15,shhgs <shhgs.efhilt at gmail.com> 写道: > > > setDaemon主要是用来作子线程的 > > > > 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 > > > > 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 > > > > On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > > > > > > > > > 在06-4-15,bird devdoer <devdoer at gmail.com > 写道: > > > > > > > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > > > a ``daemon thread''. The significance of this flag is that the entire > > Python > > > program exits when only daemon threads are > > > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > > > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > > 似乎就没执行.有人能告诉我setDaemon的作用么? > > > > 我的程序如下: > > > > > > > > > > > > import threading > > > > def f(str): > > > > for x in xrange(100000): > > > > print str > > > > > > > > > > > > def main(): > > > > t=threading.Thread(target=f,args=('1')) > > > > t.start() > > > > import time > > > > time.sleep(1) > > > > t=threading.Thread(target=f,args=('2')) > > > > t.setDaemon(True) > > > > t.start() > > > > main() > > > > > > > > 程序根本不输出'2' > > > > > > > > > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > > > > > 你在t.start()后面加上 > > > > > > import time > > > time.sleep (0.5) > > > > > > 试试。 > > > > > > _______________________________________________ > > > 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 > > > > > > > > > > _______________________________________________ > > 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 > > > > 你在程序中加个t.join()就搞定了, t.setDaemon > (True)的作用是使子线程听主线程的,就使说主线程死了,他的子线程就必须结束。 > > > > _______________________________________________ > 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/af2ea373/attachment.html
2006年04月15日 星期六 20:36
问题已经解决了,感谢各位,是我搞错了,谢谢~ 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > 谢谢各位的关注~ > > 主线程没退出,我用t.join(),还有time.sleep()都试过,还是这样. > 另外,我的程序中有另一个线程在不停的输出'1'的,证明程序并没有退出. > Python的主线程即使不调用t.join()也不会退出.我发现 > 只有调用了setDaemon的线程没有执行. > > 说这么多,把代码亲自运行一下看看就知道了,不知道是不是平台的原因. > > 在06-4-15,Pau Lau <paulau591 at gmail.com> 写道: > > > > > > > 在06-4-15,shhgs <shhgs.efhilt at gmail.com> 写道: > > > > > setDaemon主要是用来作子线程的 > > > > > > 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 > > > > > > 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 > > > > > > On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > > > > > > > > > > > > > 在06-4-15,bird devdoer < devdoer at gmail.com > 写道: > > > > > > > > > > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > > > > a ``daemon thread''. The significance of this flag is that the > > > entire Python > > > > program exits when only daemon threads are > > > > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > > > > > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > > > 似乎就没执行.有人能告诉我setDaemon的作用么? > > > > > 我的程序如下: > > > > > > > > > > > > > > > import threading > > > > > def f(str): > > > > > for x in xrange(100000): > > > > > print str > > > > > > > > > > > > > > > def main(): > > > > > t=threading.Thread(target=f,args=('1')) > > > > > t.start() > > > > > import time > > > > > time.sleep(1) > > > > > t= threading.Thread(target=f,args=('2')) > > > > > t.setDaemon(True) > > > > > t.start() > > > > > main() > > > > > > > > > > 程序根本不输出'2' > > > > > > > > > > > > > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > > > > > > > 你在t.start()后面加上 > > > > > > > > import time > > > > time.sleep (0.5) > > > > > > > > 试试。 > > > > > > > > _______________________________________________ > > > > 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 > > > > > > > > > > > > > > _______________________________________________ > > > 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 > > > > > > 你在程序中加个t.join()就搞定了, t.setDaemon > > (True)的作用是使子线程听主线程的,就使说主线程死了,他的子线程就必须结束。 > > > > > > > > _______________________________________________ > > 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/2d943856/attachment.html
2006年04月15日 星期六 20:43
对了,把新的验证程序帖一下.文档的说法是正确的,特别感谢*shhgs* <shhgs.efhilt at gmail.com> import threading import time def f(str,times): for x in xrange(times): print str time.sleep(3) def t(): t=threading.Thread(target=f,args=('1',10)) t.start() time.sleep(0) t=threading.Thread(target=f,args=('2',20)) t.setDaemon(True) t.start() #t.join() #t1.join() t() 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > > 问题已经解决了,感谢各位,是我搞错了,谢谢~ > > 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > > > 谢谢各位的关注~ > > > > 主线程没退出,我用t.join(),还有time.sleep()都试过,还是这样. > > 另外,我的程序中有另一个线程在不停的输出'1'的,证明程序并没有退出. > > Python的主线程即使不调用t.join()也不会退出.我发现 > > 只有调用了setDaemon的线程没有执行. > > > > 说这么多,把代码亲自运行一下看看就知道了,不知道是不是平台的原因. > > > > 在06-4-15,Pau Lau <paulau591 at gmail.com> 写道: > > > > > > > > > > > 在06-4-15,shhgs <shhgs.efhilt at gmail.com> 写道: > > > > > > > setDaemon主要是用来作子线程的 > > > > > > > > 比如,主线程控制时间,到了时候就退出,这是不管daemon线程是不是运行成功,都必须结束。 > > > > > > > > 或者主线程负责监听端口,子线程处理用户请求,如果主线程退出,子线程自动退出。 > > > > > > > > On 4/14/06, Jason Liu <telecomliu at gmail.com> wrote: > > > > > > > > > > > > > > > > > > > > 在06-4-15,bird devdoer < devdoer at gmail.com > 写道: > > > > > > > > > > > > > > > > > > Thread类有个方法是setDaemon,我看帮助文档上说"A thread can be flagged as > > > > > a ``daemon thread''. The significance of this flag is that the > > > > entire Python > > > > > program exits when only daemon threads are > > > > > left".我的理解是如果python程序中,只剩daemon线程的化,那么整个程序会exit. > > > > > > > > > > > 按照这个理解,我做了实验,可是每次一个线程一设置setDaemon(True),那么该线程就会立即退出, > > > > 似乎就没执行.有人能告诉我setDaemon的作用么? > > > > > > 我的程序如下: > > > > > > > > > > > > > > > > > > import threading > > > > > > def f(str): > > > > > > for x in xrange(100000): > > > > > > print str > > > > > > > > > > > > > > > > > > def main(): > > > > > > t=threading.Thread(target=f,args=('1')) > > > > > > t.start() > > > > > > import time > > > > > > time.sleep(1) > > > > > > t= threading.Thread(target=f,args=('2')) > > > > > > t.setDaemon(True) > > > > > > t.start() > > > > > > main() > > > > > > > > > > > > 程序根本不输出'2' > > > > > > > > > > > > > > > > > > > > 你的程序里当线程 t.start()之后,主线程就结束了。这时只有t这么一个线程,就会退出了。 > > > > > > > > > > 你在t.start()后面加上 > > > > > > > > > > import time > > > > > time.sleep (0.5) > > > > > > > > > > 试试。 > > > > > > > > > > _______________________________________________ > > > > > 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 > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > 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 > > > > > > > > 你在程序中加个t.join()就搞定了, t.setDaemon > > > (True)的作用是使子线程听主线程的,就使说主线程死了,他的子线程就必须结束。 > > > > > > > > > > > > _______________________________________________ > > > 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060415/08e2baea/attachment.htm
2006年04月16日 星期日 14:58
在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > 谢谢各位的关注~ > > 主线程没退出,我用t.join(),还有time.sleep()都试过,还是这样. > 另外,我的程序中有另一个线程在不停的输出'1'的,证明程序并没有退出. > Python的主线程即使不调用t.join()也不会退出.我发现 > 只有调用了setDaemon的线程没有执行. > > 说这么多,把代码亲自运行一下看看就知道了,不知道是不是平台的原因. > > 如果你的程序里还有一个非Daemon的线程在运行,主线程当然不会退出了。 -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060416/7e73e3ad/attachment.htm
2006年04月16日 星期日 19:21
在06-4-16,Jason Liu <telecomliu at gmail.com> 写道: > > > > 在06-4-15,bird devdoer <devdoer at gmail.com> 写道: > > > 谢谢各位的关注~ > > > > 主线程没退出,我用t.join(),还有time.sleep()都试过,还是这样. > > 另外,我的程序中有另一个线程在不停的输出'1'的,证明程序并没有退出. > > Python的主线程即使不调用t.join()也不会退出.我发现 > > 只有调用了setDaemon的线程没有执行. > > > > 说这么多,把代码亲自运行一下看看就知道了,不知道是不是平台的原因. > > > > > > > 如果你的程序里还有一个非Daemon的线程在运行,主线程当然不会退出了。 > > > > _______________________________________________ > 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://lists.exoweb.net/pipermail/python-chinese/attachments/20060416/10d7b895/attachment.html
Zeuux © 2025
京ICP备05028076号