python其中一个子线程,则退出全部线程,再退出进程

 

 

import threading, signal

is_exit = False


def write_login(self): global is_exit write_log('login rsync start!!!') count = 0 data_list = [] data_line = '' while not is_exit: # if debug, then log_array = self._redis.lrange(self._list_name, 0, 0), data_line = log_json try: log_array = self._redis.lrange(self._list_name, 0, 9999) except Exception,e: write_log("[write_login][redis err]" + str(e) + data_line) data_list = [] is_exit = True return

  

 

 

https://www.douban.com/note/286438085/

python多线程中要响应Ctrl+C的信号以杀死整个进程,需要:
1.把所有子线程设为Daemon;
2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成;
3.写一个响应Ctrl+C信号的函数,修改全局变量,使得各子线程能够检测到,并正常退出。
4.isAlive的循环判断要写在main里,否则无法接受中断信号

### 回答1: 如果子线程一个无限循环的函数,那么它会一直运行直到被手动停止或发生异常。即使主进程结束,子线程也会继续运行。但是,如果子线程一个有限的函数,那么当主进程结束时,子线程也会随之结束。这是因为在Python中,子线程默认是守护线程(daemon thread),守护线程会在主线程结束时自动退出。为了避免子线程在主线程结束时自动退出,可以将子线程设置为非守护线程(non-daemon thread)。可以使用`thread.setDaemon(False)`方法将子线程设置为非守护线程。 ### 回答2: 当主进程结束后,通过Thread开启的子线程将会随着主进程的结束而终止。这是因为子线程是主线程的子任务,它们的生命周期与主线程相关联。 在Python中,子线程可以分为两种类型:守护线程(daemon thread)和非守护线程(non-daemon thread)。主线程结束后,守护线程也会随之结束,而非守护线程会继续执行直到完成。 默认情况下,通过Thread创建的线程是非守护线程。这意味着如果主线程结束时,子线程仍在执行一个无限循环函数,子线程将继续执行直到循环结束或遇到退出条件。 然而,我们也可以将线程设置为守护线程,例如通过设置`thread.daemon = True`或`thread.setDaemon(True)`来实现。当将线程设置为守护线程时,主线程结束后,守护线程立即停止执行,不再等待它完成退出。 因此,如果通过Thread开启的子线程一个循环函数,并且不将其设置为守护线程,即使主进程结束,子线程仍会继续执行循环函数直到完成或遇到退出条件。但如果设置为守护线程,主进程结束后,子线程会立即停止执行。 ### 回答3: 当主进程结束后,通过thread开启的子线程会继续执行直到子线程的循环函数结束或遇到某个条件导致退出。所以,如果子线程中的循环函数不是无限循环,当循环结束后子线程也会随之结束。 但需要注意的是,如果子线程中的循环函数是无限循环,主进程结束后子线程仍会一直执行下去,直到程序被强制关闭或手动停止子线程。 这是因为子线程的执行与主进程是异步的,主进程结束并不会立即停止子线程的执行。当主进程结束时,操作系统会向子线程发送一个中断信号(SIGINT),但这并不保证子线程会立即被中断。子线程会在适当的时机收到中断信号,然后根据信号处理方式来决定是否退出。 如果子线程中的循环函数正处于阻塞状态(如在等待IO操作完成),那么子线程可能会一直阻塞在那里,直到IO操作完成或超时。 如果希望在主进程结束后,子线程也能够随之结束,可以将子线程设置为守护线程(daemon thread)。守护线程会随着主进程的结束而自动退出,不管子线程的执行是否完成。 可以使用`thread.setDaemon(True)`将一个子线程设置为守护线程,或者使用`thread.daemon = True`在创建子线程时直接设置。这样,当主进程结束时,子线程会自动退出,无需手动停止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值