什么是线程

线程与进程都是虚拟单位,目的是为了更好的描述某种事物

进程与线程的区别

进程:资源单位

线程:执行单位

开启一个进程,一定会有一个线程,线程才是真正的执行者

  • 进程间数据独立,线程间数据共享
  • 进程间通信可以使用队列,线程间数据共享
  • 线程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)的更多相关文章

  1. python——线程与多线程进阶

    之前我们已经学会如何在代码块中创建新的线程去执行我们要同步执行的多个任务,但是线程的世界远不止如此.接下来,我们要介绍的是整个threading模块.threading基于Java的线程模型设计.锁( ...

  2. python——线程与多线程基础

    我们之前已经初步了解了进程.线程与协程的概念,现在就来看看python的线程.下面说的都是一个进程里的故事了,暂时忘记进程和协程,先来看一个进程中的线程和多线程.这篇博客将要讲一些单线程与多线程的基础 ...

  3. [python] 线程简介

    参考:http://www.cnblogs.com/aylin/p/5601969.html 我是搬运工,特别感谢张岩林老师! python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件 ...

  4. PYTHON线程知识再研习A

    前段时间看完LINUX的线程,同步,信息号之类的知识之后,再在理解PYTHON线程感觉又不一样了. 作一些测试吧. thread:模块提供了基本的线程和锁的支持 threading:提供了更高级别,功 ...

  5. Python 线程(threading) 进程(multiprocessing)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...

  6. Python线程:线程的调度-守护线程

    Python线程:线程的调度-守护线程   守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程.在python中建议使用的是thread. ...

  7. python 线程(一)理论部分

    Python线程 进程有很多优点,它提供了多道编程,可以提高计算机CPU的利用率.既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的. 主要体现在一下几个方面: 进程只能在 ...

  8. python线程同步原语--源码阅读

    前面两篇文章,写了python线程同步原语的基本应用.下面这篇文章主要是通过阅读源码来了解这几个类的内部原理和是怎么协同一起工作来实现python多线程的. 相关文章链接:python同步原语--线程 ...

  9. Python学习——Python线程

    一.线程创建 #方法一:将要执行的方法作为参数传给Thread的构造方法 import threading import time def show(arg): time.sleep(2) print ...

  10. Python 线程和进程和协程总结

    Python 线程和进程和协程总结 线程和进程和协程 进程 进程是程序执行时的一个实例,是担当分配系统资源(CPU时间.内存等)的基本单位: 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其 ...

随机推荐

  1. 完美解决 IE6 position:fixed 固定定位问题

    关于 position:fixed; 属性 生成绝对定位的元素,相对于浏览器窗口进行定位. 元素的位置通过 “left”, “top”, “right” 以及 “bottom” 属性进行规定. pos ...

  2. 996弱爆了,我还能12x12, 8116+8!

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 来自长江日报 这些天"马云谈996"的话题火了 昨晚刘强东也在朋友圈发文 "8116+8!&q ...

  3. 4.8 this关键字

    /** * 测试this * @author Hank * */ /* 创建一个对象分为如下四步: 1.分配对象空间,并将对象成员变量初始化为0或空 2.执行属性值的显示初始化 3.执行构造方法 4. ...

  4. 《转》python数据类型

    转自 http://www.cnblogs.com/BeginMan/archive/2013/06/08/3125876.html 一.标准类型函数 cmp():比较大小 str():转换为字符串 ...

  5. 2019-2020 Saint-Petersburg Open High School Programming Contest (SpbKOSHP 19)

    2019-2020 Saint-Petersburg Open High School Programming Contest (SpbKOSHP 19) easy: ABFGHI medium-ea ...

  6. selenium基础-图形验证码

    selenium基础-图形验证码 一.图形验证码作用 设计的初衷其实就是为了防自动化,防止一些人利用自动工具恶意攻击网站 二.图形验证码是由客户端生成还是由服务器端生成的? 图形验证码是由服务器端生成 ...

  7. django静态文件的配置

    Django static静态配置文件   对于Django来说静态文件一般交由Web服务器处理,Django本身不处理静态文件.为了使Django开发环境能够处理静态文件,Django有和生产环境不 ...

  8. Mobox企业网盘回收站文件清空与恢复的管控

    1. Mobox系统提供了 个人网盘的回收站 2. Mobox系统提供了 针对公司及部门文档柜的回收站 Mobox系统对个人网盘的回收站可以做这样的限制 1)  可以通过安装程序 ,不出现 回收站 2 ...

  9. 从服务器上下载下来的代码,部署到本地时,Url自动带www前缀

    fix步骤: 1.网站根目录下,找到.htacess文件,有记事本打开 2.定位到 RewriteCond %{HTTP_HOST} . RewriteCond %{HTTP_HOST} !^www\ ...

  10. js实现点击空白处隐藏

    部分业务要求除了某元素外点击其他对象,对应的元素隐藏,下面是一个demo效果, <!DOCTYPE html> <html> <head> <meta cha ...