python中的多线程(一)
介绍
什么是多线程呢?相信网上已经有很多解释了,就是多个计算单元同时进行一个任务,而不是只有一个单元顺序的进行这个任务。比如说生产汽车的流水线,一共有组装、车身喷漆、缺陷检测这三个任务,单线程是按照先组装、再对车身进行喷漆然后缺陷检测。然而这样效率并不高,前面的过程如果没办法完成的话,后面的操作没办法进行,这就需要一定时间的等待,造成了资源的浪费。然而,这三个过程其实可以不按照顺序进行,比如可以先进行车身喷漆,然后再进行组装和缺陷检测。多线程就是这样的一个操作,在生产多辆汽车时,哪个工位有空缺就去执行哪个操作,而不是顺序的执行。
Python中的thread
首先看下代码:
import threading
import time
import copy
from queue import Queuedef thread_job():print('This is an added Thread,number is %s'%threading.current_thread())print('T1 start\n')for i in range(10):time.sleep(0.5)print('T1 finish\n')def T2_job():print('T2 start\n')print('T2 finish\n')def job(l,q):for i in range(len(l)):l[i]=l[i]**2q.put(l)def multithreading():q=Queue()threads=[]data=[[1,2,3],[3,4,5],[4,4,4],[5,5,5]]for i in range(4):t=threading.Thread(target=job,args=(data[i],q))t.start()threads.append(t)for thread in threads:thread.join()results=[]for _ in range(4):results.append(q.get())print(results)def main():added_thread=threading.Thread(target=thread_job)#定义一个新的线程,并指定做什么thread2=threading.Thread(target=T2_job)added_thread.start()#运行线程added_thread.join()#这个其实就是把added_thread先运行,运行完之后再运行其它线程thread2.start()thread2.join()print('all done\n')print(threading.active_count()) #这时除了主线程还有一个额外的线程print(threading.enumerate())#把线程输出print(threading.current_thread())#输出当前线程if __name__=='__main__':# main()multithreading()
python中的thread操作在threading包中,added_thread=threading.Thread(target=thread_job)表示增加一个线程,其中target是这个线程需要执行的动作。
added_thread.start()是运行线程的意思,只建立线程还不能直接使用,只有start()之后才可以。
added_thread.join()这个函数就是把定义好的新线程加入到队列,并且实行异步处理,join()的作用是,在子线程完成运行之前,这个子线程的父线程将一直被阻塞。最直观的理解就是先处理 added_thread这个线程的工作,然后再处理主线程或者其它线程的内容。具体结果如下所示:
This is an added Thread,number is <Thread(Thread-1, started 15208)>
T1 startT1 finishT2 startT2 finishall done1
[<_MainThread(MainThread, started 13308)>]
<_MainThread(MainThread, started 13308)>Process finished with exit code 0
如果没有join的话,那末多个线程就是同步处理,处理的快慢和具体任务有关,具体结果如下所示:
This is an added Thread,number is <Thread(Thread-1, started 11272)>
T1 startT2 start
all done3
[<Thread(Thread-1, started 11272)>, <Thread(Thread-2, started 1020)>, <_MainThread(MainThread, started 7564)>]
<_MainThread(MainThread, started 7564)>T2 finishT1 finish
thread在实际运行的时候是不能返回值的,但是有时需要返回一定的值,这时可以通过Queue来实现这个功能。此时主函数下面改成multithreading(),具体内容见代码,非常清晰~
python中的多线程(一)相关推荐
- 浅谈 Python 中的多线程。
本文作者:Rocky0249 公众号:Python空间 00.写在之前 大家好,我是 Rocky0429,今天我来写一下 Python 中的多线程.在正式开始之前,我先用比较通俗的语言给大家介绍几个比 ...
- Python中的多线程
Python中的多线程 文章目录 Python中的多线程 一.线程介绍 1.什么是线程 2.为什么要使用多线程 3.多线程的优点 二.线程实现 1.**`普通创建方式`** 2.**`自定义线程`** ...
- js打印线程id_浅谈python中的多线程和多进程(二)
原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...
- 获得进程id_浅谈python中的多线程和多进程(二)
原创:hxj7 本文继续分享一个关于python多线程和多进程区别的例子 前文<浅谈python中的多线程和多进程>中我们分享过一个例子,就是分别利用python中的多线程和多进程来解决高 ...
- python中的多线程求值串行和并行_python多线程和多进程——python并行编程实验
工作中经常涉及到加速程序的运行,除了代码逻辑的优化,算法的优化之外,还经常使用的一招就是并发编程.至于python的并型编程这一块.说到并行编程,我们不得不谈线程和进程这两个概念: + 进程:对于操作 ...
- Python中的多线程是假的多线程?
Python中的多线程是假的多线程? 为什么这么说,我们先明确一个概念,全局解释器锁(GIL)global interpreter lock Python代码的执行由Python虚拟机(解释器)来控制 ...
- PYTHON 中的多线程
通常我们构建的应用程序可能需要多个任务在同一个应用程序中同时运行.这就是python中多线程概念发挥作用的地方.这篇文章提供了在 Python 中使用多线程(又名 Python 中的线程)的全面解释. ...
- 一篇文章学习Python中的多线程
基本知识: 一.什么是多线程Threading 二.添加线程Thread 三.join功能 四.存储进程结果Queue 五.GIL不一定有效率 六.线程锁 Lock 一.什么是多线程Threading ...
- 万字长文!终于讲透了Python中的多线程和多进程!
我们知道,在一台计算机中,我们可以同时打开许多软件,比如同时浏览网页.听音乐.打字等等,看似非常正常.但仔细想想,为什么计算机可以做到这么多软件同时运行呢?这就涉及到计算机中的两个重要概念:多进程和多 ...
- Python中的多线程是假的多线程
Python多线程相当于单核多线程,多线程有两个好处:CPU并行,IO并行,单核多线程相当于自断一臂.所以,在Python中,可以使用多线程,但不要指望能有效利用多核.如果一定要通过多线程利用多核,那 ...
最新文章
- 双重指针作为函数参数的妙用
- 深度!移动机器人(AGV)产业链全分析
- ubuntu常用小工具
- Lecture 1 Analysis of Algorithms
- 雷林鹏分享:Yii(yiiframework)框架(二):建立第一个Yii应用
- Pytorch —— 模型保存与加载
- 在windows下使用Xming+Putty显示Linux下软件图形界面
- 根据文法画出语法树_输入语法推断的强化学习
- [Java]利用itextpdf将多个多页的PDF合并为一个
- 医疗器械软件网络安全测试报告,《医疗器械网络安全注册技术审查指导原则》延伸解读——网络安全可追溯分析报告...
- 数字图像取证:初学者手册
- 有人称2022年将会是DAO的元年
- [精简]托福核心词汇106
- python下的考勤签到系统
- 从表征到行动---意向性的自然主义进路(续一)
- 什么是用户画像——从零开始搭建实时用户画像(一)
- python批量分析表格_python批量设置多个Excel文件页眉页脚的脚本
- 完全用Linux工作,作者王垠
- 详说SPA(单页应用)和MPA(多页应用)
- Synopsys Detect for Jenkins 插件配置