python-多线程-守护线程-线程互斥锁-信号量-守护进程的使用

文章目录一、多线程二、线程对比进程三、线程间资源共享四、守护线程五、线程中常用属性六、线程互斥锁七、信号量八、守护进程的使用一、多线程什么是线程:程序的执行线路,相当于与一条流水线,其包含了程序的具体执行步骤,如果我们把操作系统比喻为一个工厂,进程就是车间,线程就是流水线线程和进程的关系:进程中包含了运行改程序需要所有资源,进程是一个资源单位,线程是CPU的最小执行单位,每一个进程一...
摘要由CSDN通过智能技术生成

一、多线程

  1. 什么是线程:程序的执行线路,相当于一条流水线,其包含了程序的具体执行步骤,如果我们把操作系统比喻为一个工厂,进程就是车间,线程就是流水线
  2. 线程和进程的关系:进程中包含了运行改程序需要所有资源,进程是一个资源单位,线程是CPU的最小执行单位,每一个进程一旦被创建就默认开启了一条线程,称之为主线程,一个进程可以包含多个线程,进程包含线程,而线程依赖进程。
  3. 为什么使用线程:是为了提高程序效率,为何不用多进程提高效率?是因为进程对操作系统的资源耗费非常高
  4. 线程是如何提高效率的:多线程可以使CPU在一个进程内进行切换,从而提高CPU占用率
  5. 如何使用:两种开启线程的方式
    1. 实例化Thread类
    2. 继承Thread类覆盖run方法
  6. 什么情况下应该开启多线程:
    1. 当程序中遇到IO的时候
    2. 当程序中是纯计算任务时,也无法提高效率
  7. 进程和线程的区别:
    1. 进程对于操作系统的资源耗费非常高,而线程相反非常低(比进程低10-100倍)
    2. 在同一个进程中,多个线程之间资源是共享的

开启线程的第一种方式:

from threading import Thread
from multiprocessing import Process

def task():
    print("threading running!")

t1 = Thread(target=task)
t1.start()
print("over") 
#threading running!
#over

开启线程的第二中方式:

from threading import Thread
from multiprocessing import Process

class MyThread(Thread):
    def run(self):
        print("子线程 running....")
        
MyThread().start()
print("over2")

二、线程对比进程

100个进程时间统计:

from multiprocessing import Process
import time

def task():
    pass

# 100个进程时间统计
if __name__ == '__main__':
    start = time.time()
    ps = []
    for i in range(100):
        p = Process(target=task)
        p.start()
        ps.append(p)
    for p in ps:
        p.join()
    print(time.time()-start) #时间为6.289931774139404

100个线程时间统计:

from threading import Thread
import time

def task():
    pass

start = time.time()
ts = []
for i in range(100):
    t = Thread(target=task)
    t.start()
    ts.append(t)
for t in ts:
    t.join()
print(time.time()-start) #0.013973474502563477

三、线程间资源共享

from threading import Thread

x = 100
def task():
    print('run....')
    global x
    x = 0

t = Thread(target=task)
t.start()
t.join()

print(x)
print('over')
#run....
#0
#over

四、守护线程

  1. 什么是守护线程:守护线程会在所有非守护线程结束后结束,如果把线程分为皇帝、太子、和皇后,皇后设置为守护线程,那么皇后线程会在太子和皇帝都死亡后死亡当所有非守护线程结束后,守护线程也跟着结束了。同一个进程可以有多个守护线程
from threading import Thread
import time

def task():
    print('子线程运行')
    time.sleep(1)
    print('子线程结束')
t = Thread(target=task)
t.setDaemon(True)
t.start()
print("over")
#子线程运行
#over

五、线程中常用属性

from threading import Thread,current_thread,enumerate,active_count
import os
def task():
    print('running...')
    print(os.getpid()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值