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总是运行一个进程,其他 ...
随机推荐
- JMeter常用菜单以及设置
如何清空View Results Tree 先选中目标view results tree,然后在菜单上选择Run-->Clear https://stackoverflow.com/questi ...
- 简单的栈溢出demo
Code package startnow; /** * @auther draymonder */ public class StackOverFlowTest { public static vo ...
- Python3 list sort排序
转自:https://blog.csdn.net/u010758410/article/details/79737498 当带排序列表的元素由多字段构成时,我们可以通过sorted(iterable ...
- .psl脚本介绍
.ps1文件是PowerShell写好的脚本文件 可以在记事本中写一段PowerShell代码,然后将其保存为“xxx.ps1”,后面要使用它的时候,双击即可运行了.这有点像批处理的“.bat”文件, ...
- [0412]SQL Server 2008 R2 安装 & 设置
SQL Server 2008 R2 安装 & 设置 Sql Server 安装 安装环境: Windows 10 1709 64位 安装文件: Sql Server 2008 R2 Sql ...
- nginx的使用教程
一.基本概念 1.1 正向代理和反向代理 (参考文档:https://www.cnblogs.com/hafiz/p/7233306.html) 假设我们给定客户端A.代理服务器B.以及最终服务器C ...
- [原][osg][osgearth]倾斜摄影1.介绍
总体介绍: 倾斜摄影就是将拍好的数据,三角网格化再附上贴图. 目前流行处理软件: Street Factory.PIX4DMapper.smart3D 后期开发平台:超图 Skyline smart3 ...
- git push 使用
git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pull命令相仿. $ git push <远程主机名> <本地分支名>:<远程分支名> ...
- Eclipse使用之将Git项目转为Maven项目, ( 注意: 最后没有pom.xml文件的, 要转化下 )
Eclipse使用之将Git项目转为Maven项目(全图解) 2017年08月11日 09:24:31 阅读数:427 1.打开Eclipse,File->Import 2.Git->Pr ...
- css sticker footer
.detail position: fixed z-index: 100 top: 0 left: 0 width: 100% height: 100% overflow: auto .detail- ...