美文网首页
Python学习——多线程操作

Python学习——多线程操作

作者: 阿猫阿狗py | 来源:发表于2018-08-23 19:03 被阅读17次

多进程、多线程操作

线程和进程对比:

一个进程可以有多个线程,但是至少有一个主线程

一个线程只能属于一个进程

一个进程中多个线程,可以共享进程中提供的数据

CPU运算分配给线程,CPU上执行运算的是线程

线程时最小的运行单元,晋城市最小的资源管理单元

串行:按照执行步骤顺序执行

image.png

并行:同时执行多个任务

image.png

并发:同时收到多个任务,同时执行多个任务。但是具体到某一刻,只是在执行一个任务。

image.png

(1) _thread多线程操作,较为底层

通过_thread函数启动两个线程完成多线程并发操作

导入模块

Import _thread

启动进程

_thread.start_new_thread(函数,())

获取线程编号

_thread.get_ident()

注意:让子线程执行结束,需要让主线程休眠

(2) threading多线程操作,使用较为普遍

导入模块

Import threading

线程启动

t1 = threading.Thread(name=" ",target=函数名)

获取当前存货的所有进程

a) threading.active_count()

b) t = threading.activeCount()

print(t)

获取当前线程对象

threading.current_thread()

获取当前线程对象名称

threading.current_thread().getName()

获取当前线程对象编号

threading.get_ident()

获取主线程

threading.main_thread() #获取线程名称与编号操作与获取当前线程一样

(3) 线程锁操作[互斥锁|可重用锁]

a) 互斥锁

定义互斥锁对象

lock = threading.Lock()

加锁

lock.acquire() #常用if进行判断即:if lock.acquire():

互斥锁的主要作用是,当一个进程在对数据进行操作时,不让其他进程造成干扰。加上互斥锁后,当一个进程对数据进行操作时,其他进程不能再操作数据,只能等上一个进程操作完毕后,下一个进程才能进行操作。

解锁

lock.release()

注意:在进行加锁后要记得解锁,否则程序可能死锁,不再继续运行

死锁:可·······尝试·使用可重用锁

b) 可重用锁

i. 使用时只操作一个

(4)线程状态-daemon

daemon的主要作用是守护线程。

在Python中daemon默认为False,当主进程结束时,子线程继续执行。如果想让主线程结束时子线程跟着结束,则需要将daemon改为True

用法:-》进程名.daemon = False/True

(5)join独占属性:让当前线程独占CPU时间片,直到当前线 程运行结束/超时

进程名.join()

(6)两个线程之间的相互通信

#线程通信-事件对象

event = threading.Event()

event.set()添加标记

event.wait()线程等待

event.clear()清除标记

image.png

线程通信­-条件对象

定义条件对象

con = threading.Condition()

con.acquire()上锁

con.release()解锁

con.wait()等待

con.notify()唤醒

公共数据的处理:生产者、消费者问题

公共的数据[篮子]

生产者:蒸包子-> 放到篮子中:并且告诉[唤醒]所有消费者可以吃了

如果篮子满了,所有 生产者 等待

消费者:吃包子-> 从篮子中获取数据,并且告诉[唤醒]所有生产者继续蒸包子

如果篮子空了,所有 消费者 等待

#线程通信-队列

创建一个队列,存储数据

basket = queue.Queue(10)

put(data [, timeout=None])

向队列中添加数据,如果队列已满~一直等待[到超时]

get([timeout=None])

从队列中获取数据,如果队列已空~一直等待[到超时]

特性:线程安全!

相关文章

  • 2行python代码打造多线程工具,这是史上最强的黑科技?

    Python黑科技 两行代码实现多线程操作 当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习...

  • Python 多线程操作学习

    Python 多线程操作 什么是线程: 线程(Thread)也叫轻量级进程,是操作系统能够进行运算调度的最小单位,...

  • Python学习——多线程操作

    多进程、多线程操作 线程和进程对比: 一个进程可以有多个线程,但是至少有一个主线程 一个线程只能属于一个进程 一个...

  • Python多线程

    Python内置库:threading(多线程操作) Python的线程操作在旧版本中使用的是thread模块,在...

  • python多线程 from multiprocessing.d

    python多线程 from multiprocessing.dummy import Poolpython操作e...

  • 索引 - Python

    文集主页 Python 解释器和三种栈多进程、多线程、协程、并发并行Python I/O 操作(一)Python ...

  • Python 多线程抓取图片效率实验

    Python 多线程抓取图片效率实验 实验目的: 是学习python 多线程的工作原理,及通过抓取400张图片这种...

  • Python学习17-多线程

    查看所有Python相关学习笔记 多线程开发: 进程: 进程的概念:运行着的程序每个进程至少包含一个线程线程是操作...

  • python多线程入门之旅一

    所有代码来自python核心编程 参考python核心编程一书,学习多线程工作模式,多线程实现主要模块thread...

  • python------多线程和单线程

    一、创建多线程 Python提供两个模块进行多线程的操作,分别是thread和threading,前者是比较低级的...

网友评论

      本文标题:Python学习——多线程操作

      本文链接:https://www.haomeiwen.com/subject/iirzbftx.html