python记录_day33 线程
##进程就像加工厂,线程是里边的流水线
##进程是资源单位,线程是运行单位,每个进程至少有一个线程
即进程是资源分配的最小单位,线程是CPU调度的最小单位 一、线程的创建
两种方式,和进程类似
1、t = Thread(target = fun,arges = (,))
2、自定义类 继承Thread,重写run方法
import time
from threading import Thread
class Sayhi(Thread):
def __init__(self,name):
super().__init__()
self.name=name
def run(self):
time.sleep(2)
print('%s say hello' % self.name) if __name__ == '__main__':
t = Sayhi('太白')
t.start()
print('主线程')
方式二创建线程
#常用方法
t.join() 等待线程结束
t.isAlive() 判断进程是否还活着
current_thread().getName() 获取线程名
current_thread().ident() 获取线程id
threading.currentThread() 返回当前线程量
threading.enumerate() 返回正在运行的线程列表
二、数据共享
同一进程中线程之间是数据共享的,这就会有数据安全问题,所以需要加锁
三、死锁
双方等待对方释放锁,所以都不能执行
解决死锁方案:用递归锁RLock
递归锁里有一个计数器,只有计数器为0时,别人才能抢。当有人抢到时就计数器+1,释放时计数器-1
import time
from threading import Thread, Lock, RLock def func1(lock_A, lock_B):
with lock_A:
# lock_A.acquire()
time.sleep(0.1)
print('alex拿到了A锁')
# lock_B.acquire()
with lock_B:
print('alex拿到了B锁')
# lock_B.release()
# lock_A.release() def func2(lock_A, lock_B):
with lock_B:
# lock_B.acquire()
print('taibai拿到了B锁')
# lock_A.acquire()
with lock_A:
print('taibai 拿到了A锁') # lock_A.release()
# lock_B.release() if __name__ == '__main__':
lock_A = Lock()
lock_B = Lock()
lock_B = lock_A # lock_A = RLock()
# lock_B = RLock()
lock_A =lock_B =RLock() t1 = Thread(target=func1, args=(lock_A, lock_B))
t2 = Thread(target=func2, args=(lock_A, lock_B))
t1.start()
t2.start()
四、守护线程
正常情况下,主线程代码结束后会等待子线程结束,子线程都结束了主线程才会结束。但是,将子线程设为守护线程后,主线程就不再等他结束,所以守护线程随着主线程的结束而结束。
#注意和守护进程的区别
守护进程时随着主进程的代码结束而结束,主进程代码结束不意味着主进程的结束,(主进程代码结束后会等着子进程结束,给他们收尸)
python记录_day33 线程的更多相关文章
- python进程、线程、协程(转载)
python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python进阶-------进程线程(二)
Python中的进程线程(二) 一.python中的"锁" 1.GIL锁(全局解释锁) 含义: Python中的线程是操作系统的原生线程,Python虚拟机使用一个全局解释器锁(G ...
- Python中的线程和进程
引入进程和线程的概念及区别 threading模块提供的类: Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, l ...
- python多线程与线程
进程与线程的概念 进程 考虑一个场景:浏览器,网易云音乐以及notepad++ 三个软件只能顺序执行是怎样一种场景呢?另外,假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I ...
- Python 基础之 线程与进程
Python 基础之 线程与进程 在前面已经接触过了,socket编程的基础知识,也通过socketserver 模块实现了并发,也就是多个客户端可以给服务器端发送消息,那接下来还有个问题,如何用多线 ...
- python day 20: 线程池与协程,多进程TCP服务器
目录 python day 20: 线程池与协程 2. 线程 3. 进程 4. 协程:gevent模块,又叫微线程 5. 扩展 6. 自定义线程池 7. 实现多进程TCP服务器 8. 实现多线程TCP ...
- python基础之线程、进程、协程
线程 线程基础知识 一个应用程序,可以多进程.也可以多线程. 一个python脚本,默认是单进程,单线程的. I/O操作(音频.视频.显卡操作),不占用CPU,所以: 对于I/O密集型操作,不会占用C ...
- Python进程、线程、协程
进程和线程的解释 进程(process)和线程(thread)是操作系统的基本概念,计算机的核心是CPU,它承担了所有的计算任务: 单个CPU一次只能运行一个任务,代表单个CPU总是运行一个进程,其他 ...
随机推荐
- powershell的stable和preview版本
在看https://github.com/PowerShell/PowerShell/releases的时候发现,已经发布了6.2.0的preview版本的情况下,还会继续发布6.1.3. 在Read ...
- Face Aging with Conditional Generative Adversarial Network 论文笔记
Face Aging with Conditional Generative Adversarial Network 论文笔记 2017.02.28 Motivation: 本文是要根据最新的条件产 ...
- (转载)用C#实现MySQL建库及建表
最近做一个项目,为了方便用户使用,希望可以在系统初始化的时候,自动实现MySQL数据库的建库和建表操作.在网上查了很多资料都没有找到合适的,偶尔在一个国外网站上看到了相关的内容,特把实现方法整理如下: ...
- 【C#】C#学习笔记_1
C#的程序入口为某一个类里面的static void Main(string[] args){}方法,如果一个工程有多个Main方法,那么需要在工程配置中选择一个作为程序入口. C#的输入.输出操作在 ...
- 2、iptables基本应用
iptables:规则管理工具 添加.修改.删除.显示等: 规则和链有计数器: pkts: 由规则或链所匹配到的报文的个数: bytes:由规则或链匹配到的所有报文大小之和: iptables命令: ...
- 理解git的分支原理,更好地使用git
文章内容转载于git-scm. 部分内容涉嫌枯燥 一.git分支概念 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控 ...
- JaveWeb 公司项目(2)----- 类模态窗口显示DIV并将DIV放置在屏幕正中间
上一篇博客写的是通过隐藏显示进行div的替换,接下来需要在原有的div前添加一个div,进行表单的提交,需要将div放置在正中间,然后类似C#中的模态窗口,在进行完新弹出的div操作之后,才可以进行下 ...
- lombok-@Accessors注解
@Accessors 有3个选项:如图默认是false 1.当fluent = true时 2.当fluent = true时
- git 修改文件夹名字后如何提交
将文件夹名字从 v1.0.1 修改为 v1.0.2 git add --ignore-removal "v1.0.2/xsxsx"
- mysql基本知识总结
第一天 create database act_web character set utf8; : 创建数据库并设立编码(命令中是不允许使用“-”的) '; :创建用户并设立密码 grant all ...