Python-线程(1)
什么是线程
线程与进程都是虚拟单位,目的是为了更好的描述某种事物
进程与线程的区别
进程:资源单位
线程:执行单位
开启一个进程,一定会有一个线程,线程才是真正的执行者
- 进程间数据独立,线程间数据共享
- 进程间通信可以使用队列,线程间数据共享
- 线程cpu切换要比进程切换 快的多
开启线程
# coding=utf-8
from threading import Thread
from threading import current_thread
import time
'''
开启线程方式1:
'''
def task():
print(f"{current_thread().name} 线程开启")
time.sleep(1)
print(f"{current_thread().name} 线程结束")
if __name__ == '__main__':
for i in range(3):
t = Thread(target=task)
t.daemon = True
t.start()
# 判断子线程是否存活
print(t.is_alive())
print(t.isAlive())
print("主|")
'''
开启线程方式2:
'''
class MyThread(Thread):
def run(self):
print(f"{current_thread().name} 线程开启")
time.sleep(1)
print(f"{current_thread().name} 线程结束")
if __name__ == '__main__':
t = MyThread()
t.start()
Thread-1 线程开启
True
True
Thread-2 线程开启
True
True
Thread-3 线程开启
True
True
主|
线程对象的属性:
current_thread().name:表示当前线程的名字
t.daemon = True:线程的守护进程 跟着主线程一起死掉
t.is_alive() or t.isAlive():判断子线程是否存活
t.join():等待子线程结束
为什么要使用线程
节省内存资源
开启进程:会开辟一个名称空间,每开启一个进程都会占用一份内存资源
,会自带一个线程
开启线程:一个进程可以开启多个线程,线程的开销远小于进程
注意:进程不能实现并行,线程只能实现并发,进程可以实现并行
比喻:内存就像一个工厂,子进程就像是一个个工厂车间,线程就像车间内的流水线
线程之间数据是共享的
线程互斥锁
# coding=utf-8
from threading import Thread,current_thread,Lock
import time
n = 100
'''
线程中数据时共享的,如果不加锁,那么每个线程抢到的资源都将是同一个,则不能保证数据的安全
'''
def task(i,mutex):
print(f"线程 {current_thread().name} 启动")
global n
# 添加线程互斥锁
mutex.acquire()
temp = n
time.sleep(0.1)
n = temp - 1
# 释放互斥锁
mutex.release()
print(f"线程 {current_thread().name} 结束")
# print(n)
if __name__ == '__main__':
mutex = Lock()
for i in range(10):
t = Thread(target=task,args=(i,mutex))
t.start()
t.join()
print(n)
线程 Thread-1 启动
线程 Thread-1 结束
线程 Thread-2 启动
线程 Thread-2 结束
线程 Thread-3 启动
线程 Thread-3 结束
线程 Thread-4 启动
线程 Thread-4 结束
线程 Thread-5 启动
线程 Thread-5 结束
线程 Thread-6 启动
线程 Thread-6 结束
线程 Thread-7 启动
线程 Thread-7 结束
线程 Thread-8 启动
线程 Thread-8 结束
线程 Thread-9 启动
线程 Thread-9 结束
线程 Thread-10 启动
线程 Thread-10 结束
90
Python-线程(1)的更多相关文章
- python——线程与多线程进阶
之前我们已经学会如何在代码块中创建新的线程去执行我们要同步执行的多个任务,但是线程的世界远不止如此.接下来,我们要介绍的是整个threading模块.threading基于Java的线程模型设计.锁( ...
- python——线程与多线程基础
我们之前已经初步了解了进程.线程与协程的概念,现在就来看看python的线程.下面说的都是一个进程里的故事了,暂时忘记进程和协程,先来看一个进程中的线程和多线程.这篇博客将要讲一些单线程与多线程的基础 ...
- [python] 线程简介
参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件 ...
- PYTHON线程知识再研习A
前段时间看完LINUX的线程,同步,信息号之类的知识之后,再在理解PYTHON线程感觉又不一样了. 作一些测试吧. thread:模块提供了基本的线程和锁的支持 threading:提供了更高级别,功 ...
- Python 线程(threading) 进程(multiprocessing)
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- Python线程:线程的调度-守护线程
Python线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread. ...
- python 线程(一)理论部分
Python线程 进程有很多优点,它提供了多道编程,可以提高计算机CPU的利用率.既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的. 主要体现在一下几个方面: 进程只能在 ...
- python线程同步原语--源码阅读
前面两篇文章,写了python线程同步原语的基本应用.下面这篇文章主要是通过阅读源码来了解这几个类的内部原理和是怎么协同一起工作来实现python多线程的. 相关文章链接:python同步原语--线程 ...
- Python学习——Python线程
一.线程创建 #方法一:将要执行的方法作为参数传给Thread的构造方法 import threading import time def show(arg): time.sleep(2) print ...
- Python 线程和进程和协程总结
Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间.内存等)的基本单位: 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其 ...
随机推荐
- jquery判断对象是undifined,判断对象是null
判断对象是undifined: var aaa = undefined; if (typeof(aaa) == "undefined") { ... } typeof 返回的是字符 ...
- hexo next主题深度优化(二),懒加载。
文章目录 tip:没有耐心的可以直接看:正式在hexo next中加入懒加载(最下面) 废话 背景 懒加载简单介绍 引入js 重点!敲黑板了!!! 完善懒加载函数 懒加载函数可配置的参数 正式在hex ...
- [课后作业] 第001讲:我和Python的第一次亲密接触 | 课后测试题的答案
0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方式快速完成某些 ...
- uoj140 【UER #4】被粉碎的数字
题目 看起来就像是数位\(\rm dp\) 不妨从竖式乘法的角度来考虑这个问题 为了方便处理进位,我们得从低位向高位填数 设\(dp[i][0/1][j][p][t]\)表示填到了第\(i\)位,卡不 ...
- cms系统视频分享
cms_001-CMS系统功能需求简介-1.avicms_002-如何采用用例分析方法来理解需求-1.avicms_003-后台管理系统用例-1.avicms_004-实现验证码的初步思路-1.avi ...
- dubbo jar 配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- css 写一个向右的箭头
经常写移动端页面时会用到向右的箭头,之前都是用图片,突然想到用css应该也能写,于是一搜还确实有 width: 7px; height: 7px; border-top: 2px solid #fff ...
- C# 调用java的Webservice时关于非string类型处理
比如webservice地址是:http://wdft.com:80/services/getOrderService1.0?wsdl 方法是:getOrder 1.首先添加引用: 2. 3.引用完成 ...
- RobotFramework Selenium2 EXCUTE JAVASCRIPT
https://www.cnblogs.com/lixy-88428977/p/9563247.html
- Win10下使用默认的照片查看器
在打开图片的时候默认是 画图,我们想要用windows图片器打开,但是更多应用里面没有这一选项, 按 Windows徽标键+R键,打开运行命令窗口,输入"regedit"命令 来打 ...