python 多线程threading程序详情
作者:WX_LW 发布时间:2021-03-23 10:07:34
CPython implementation detail: 在 CPython 中,由于存在全局解释器锁, 同一时刻只有一个线程可以执行 Python 代码(虽然某些性能导向的库可能会去除此限制)。 如果你想让你的应用更好地利用多核心计算机的计算资源,推荐你使用multiprocessing或concurrent.futures.ProcessPoolExecutor但是,如果你想要同时运行多个 I/O 密集型任务,则多线程仍然是一个合适的模型。
再来引入一个概念:
并行(parallelism): 是同一时刻,每个线程都在执行。
并发(concurrency):是同一时刻,只有一个线程执行,然后交替执行(再加上电脑运行速度快)。所以从一个宏观的角度来看,似乎每个线程都在执行了。
可以知道python线程是并发的。
关于线程Threading的方法(获取线程的某种属性)。
active_count():它会获得,执行这个方法时,还存活的Thread()的对象数量。
enumerate():返回当前所有存活的Thread对象的列表。
current_thread():返回当前调用者 控制Thread()线程的对象。如果调用者控制的线程对象不是由threading创建,则会返回一个功能受限的虚拟线程对象。
get_ident():返回当前线程的“线程标识符”。它是一个非零整数。
get_native_id():返回内核分配给当前线程的原生集成线程ID。这是一个非负整数。
main_thread():返回主线程(thread)对象,一般是python解释器开始时创建的线程。
线程简介:
Thread类表示在单独的控制线程中运行的活动。指定活动有两种方法:将可调用对象传递给构造函数,或重写子类中的run()方法。子类中不应重写任何其他方法(构造函数除外)。换句话说,只重写这个类的_init__;()和run()方法
一旦线程活动开始,该线程会被认为是 '存活的' 。当它的run() 方法终结了(不管是正常的还是抛出未被处理的异常),就不是'存活的'。
先看看该类的参数有哪些:
class threading.
Thread
(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
group:官方的解释是,为了日后扩展ThreadGroup类实现而保留。(唉,我也不太清楚的)
target:是要于多线程的函数
name:是线程的名字
args :函数的参数,类型是元组()
kwargs:函数的参数,类型是字典{}
为了便于理解,先举一个小例子,为了方便理解,先简单了解一下该类的一个方法(函数在类中被称为方法):
start():开始线程活动
import threading
import time
# 打印函数a
def printa(a):
count = 0
while count < 5:
time.sleep(2)
print("线程:%s。打印:%s。时间:%s。" % (threading.current_thread().name, a, time.ctime()))
count += 1
# 打印函数b
def printb(b):
count = 0
while count < 5:
time.sleep(4)
print("线程:%s。打印:%s。时间:%s。" % (threading.current_thread().name, b, time.ctime()))
count += 1
# threading.Thread(target=,args=(),name='')
t1 = threading.Thread(target=printa, args=(10,), name='线程1')
t2 = threading.Thread(target=printb, args=(20,), name='线程2')
t1.start()
t2.start()
t1.join()
t2.join()
print("退出主线程")
import threading
import time
# 打印函数a
def printa(a):
count = 0
while count < 5:
time.sleep(2)
print("线程:%s。打印:%s。时间:%s。" % (threading.current_thread().name, a, time.ctime()))
count += 1
# threading.Thread(target=,args=(),name='')
threadList = []
for i in range(3):
t = threading.Thread(target=printa, args=(i,))
threadList.append(t)
for t in threadList:
t.start()
for t in threadList:
t.join()
print("退出主线程")
来源:https://blog.csdn.net/weixin_58619062/article/details/124116159


猜你喜欢
- 本文实例为大家分享了vue+element实现图片上传及裁剪的具体代码,供大家参考,具体内容如下随便写的一个小demo 功能是没有任何问题
- 假设名为A.py的文件需要调用B.py文件内的C(x,y)函数假如在同一目录下,则只需import Bif __name__ == &quo
- 问题你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,A
- 前言在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程是一样的.如果重复去写操作过程会增加代码量,对应这种多组数
- 代码执行结构为顺序结构、选择结构、循环结构。python判断选择结构【if】if 判断条件 #进行判断条件满足之后执行下方语句 执行语句el
- 指定的代码页特性无效。 codepage属性:是指出网页的代码页 如果制作的网页脚本与WEB服务端的默认代码页不同,则必须指明代码页: 代码
- 模块的相关概念 1. 什么是模块模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块模块的英文名叫:
- 正在看的ORACLE教程是:自动备份Oracle数据库。
- 视频本课程的视频添加盾牌现在,我们的玩家被一颗流星击中就摧毁。这不是很有趣,所以我们要向Player类添加一个shield属性,它是0 -
- 我听说 Hooks 最近很火。讽刺的是,我想用一些关于 class 组件的有趣故事来开始这篇文章。你觉得如何?本文中这些坑对于你正常使用 R
- 网上大部分都是上传文件,于是个人参照网上一些博客的内容,写了一个把windows上目录上传到远程linux的一个小程序。下面是代码:clas
- 通常来说,php中总是只获取最后一个复选框的值,那么如何才能获取所有复选框的值?解决办法如下:form表单的部分代码如下:<input
- 大家好,我是辣条。曾经有一个真挚的机会,摆在我面前,但是我没有珍惜,等到失去的时候才后悔莫及,尘世间最痛苦的事莫过于此,如果老天可以再给我一
- 一. 什么是装饰器知乎某大佬如是说:内裤可以用来遮羞,但是到了冬天它没法为我们防风御寒,聪明的人们发明了长裤,有了长裤后宝宝再也不冷了,装饰
- 每天工作忙,学会python自动收发邮件,代替你问候女友1、相关库介绍1)yagmailYet Another GMAIL/SMTP cli
- 安装npm1、检查node,未安装在这里下载最新版安装。2、检查npm,node自带npm但不是最新版本,需要命令更新:npm instal
- 1. 设置fomat格式,如下: # 取前5个字符,跳过4个字符华,再取3个字符 format = '5s 4x 3s' 2
- 如果想读取用 open() 函数打开的文件中的内容,除了可以使用 read() 函数,还可以使用 readline() 和 readline
- 各位想必都知道,onfocus="this.blur()"这条代码能消除链接时的虚线框,但你有没有想过,如果你的网页上有
- tf.diag(diagonal,name=None) #生成对角矩阵import tensorflowas tf;diagonal=[1,