多任务之线程

一、多任务
并发:执行的任务数大于cpu核数,使用调度方法,不是同时进行的,总有些任务时不执行的在同一时刻
并行:任务数量小于cpu核数,任务是同时进行的
线程同步:按照预定的先后顺序执行

二、线程
(1)定义:线程是进程的一个分支,每个进程最少一个线程,是cpu调度和分派的最小单元
#导入线程模块
import threading

threading.Thread( target= ,args= (,),kwargs={‘name’: ,})
*
target: 执行的目标任务名,通常为某个运行方法,后边不加括号
*
args: 以元组的方式给执行任务传参
*
kwargs: 以字典方式给执行任务传参

启动
线程.start()
(2)常用方法
获取活动线程的列表: threading.enumerate()
获取活动线程的个数:threading.active_count()
获取当前执行的线程:threading.current_thread()

(3)线程的注意点:
1.线程是无序的
2.主线程会等待子线程结束后才结束
3.可以设置守护主线程,当主线程结束,子线程会直接销毁不在执行子线程的代码
设置守护主线程:
方法1:threading.Thread(tareage=,daemon=True)
方法2:线程.setDaemon(True)

(4)自定义线程:
要继承Thread,并且要覆盖run()方法,
run()方法中可以启动线程任务,但是在最后不能直接掉用run()方法,只能实例化类名.start(),start会默认调用run方法。
继承treading.Thread ,当需要重写Thread中的init的时候, super(MyThread, self).init()

(5)多线程的资源竞争
资源竞争:当多线程对全局变量进行修改的时候,会出现错误
解决办法:
1.延时, sleep()
2.线程等待,线程.join() 主线程等待这个线程执行完以后再执行后边的代码,线程等待会让多线程变成单线程执行,效率低
3.互斥锁

(6)互斥锁
保证每次只有一个线程进行写入操作,保证写入数据的正确性

创建锁

mutex = threading.Lock()

锁定

mutex.acquire()

释放

mutex.release()

使用不好易出现死锁现象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值