Python中的线程

python中的主线程和子线程
今天上课的时候听老师说到线程方面的知识:在主线程结束后子线程都会被强制终止(老师讲课用的是C语言)。
但是我回想起我之前用python进行线程操作的时候并不是这样,主线程执行完后子线程仍然可以继续执行。
在网上查找资料后发现python线程中有一个setDaemon()方法。
一、 默认情况下,当python创建了一个进程,会产生一个主线程,此时setDaemon()方法默认为setDaemon(False),即主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束,相当于在程序末尾加入了join()方法。
例子:

import threading
import time

def thread():
    time.sleep(2)
    print('---子线程结束---')

def main():
    t1 = threading.Thread(target=thread)
    #t1.setDaemon(True) #当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止
    t1.start()
    print('---主线程结束---')

if __name__ == '__main__':
    main()

输出:
在这里插入图片描述
二、 当我们使用setDaemon(True)时,这时子线程被设置为守护线程,主线程一旦执行结束,则全部子线程被强制终止,这是与jion()相反的。要注意的是,此方法必须在start()方法调用之前设置。
例子:

import threading
import time

def thread():
    time.sleep(2)
    print('---子线程结束---')

def main():
    t1 = threading.Thread(target=thread)
    t1.setDaemon(True) #当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止
    t1.start()
    print('---主线程结束---')

if __name__ == '__main__':
    main()

输出:
在这里插入图片描述

### Python线程与进程的区别 在Python中,线程和进程都是用于实现并发编程的重要机制,但两者之间存在显著差异。 #### 线程的特点 线程是操作系统能够进行运算调度的最小单位。多个线程可以在同一个进程中共享内存空间和其他资源,这使得线程间通信变得简单快捷[^1]。然而,由于全局解释器锁(GIL)的存在,在CPython实现下,即使启动了多线程,某些情况下也无法真正并行执行CPU密集型任务[^5]。 #### 进程的特点 相比之下,每个进程拥有独立的地址空间,这意味着同进程之间的数据隔离较好,安全性更高。但是这也带来了更高的开销——创建新进程的成本远大于创建新线程,并且跨进程的数据交换相对复杂一些[^3]。 ### 使用场景分析 对于I/O密集型的应用来说,比如网络爬虫或文件处理工具,使用多线程往往能获得较好的效果;而对于计算密集型的任务,则更适合采用多进程方案以充分利用多核处理器的能力[^2]。 ### 实现示例 以下是简单的多线程和多进程的例子: #### 多线程实例 ```python import threading def print_numbers(): for i in range(5): print(f'Number {i}') thread = threading.Thread(target=print_numbers) thread.start() thread.join() # 主线程等待子线程完成后再继续往下走 ``` #### 多进程实例 ```python from multiprocessing import Process def print_letters(): for letter in 'ABCDE': print(letter) process = Process(target=print_letters) process.start() process.join() # 父进程等待子进程结束之后再继续运行下面的代码 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值