最新要闻
- 每日观察!三星手机工业设计要焕然一新了!前奔驰中国首席大牛加盟:全权操刀
- 世界短讯!全新红旗H6亮相2022广州国际车展:压垮合资中型轿车又一力作
- B站跨年晚会节目单官宣:邓紫棋首唱《三体》片尾曲《面壁者》
- 提前加满 2023开年油价第一涨:预计每升多花0.21元
- 员工超54万!京东为一线员工薪酬福利开支超330亿元
- 搭配紫光展锐国产芯:微软新Surface RT预计明年夏季推出
- 环球视讯!魅友人物纪录片《我有一个朋友》首映 80后CEO龚昕:我的青春是魅族
- 世界实时:搭乘猎鹰9号火箭 韩国首个月球探测器成功入轨:位列世界第七
- 【新视野】《王者荣耀》2023年首个新版本定了:新英雄莱西全员免费得
- 焦点观察:3.0T V6发动机卖成白菜价 长城皮卡山海炮上市:22.88万起
- 鲁大师12月新机性能/流畅榜发布:小米直接包揽性能榜前三!
- 【环球时快讯】面包车行驶中车内起火 突然爆炸车顶掀飞数米高
- 【环球新要闻】大礼包抄底价:良品铺子坚果礼盒1440g装49元
- 80后宝妈辞职后做沙滩代写:月入过万
- JJJJ车厘子有多大?JJJJ车厘子价格是多少?
- 狱警十七在第几集出现的?狱警十七为什么杀小朵?
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球新消息丨Python教程:如何创建多线程?
一、python线程的模块
1.thread和threading模块
- thread模块提供了基本的线程和锁的支持
- threading提供了更高级别、功能更强的线程管理的功能。
2. Queue模块
Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。
【资料图】
3.注意模块的选择
- 避免使用thread模块
- 因为更高级别的threading模块更为先进,对线程的支持更为完善
- 而且使用thread模块里的属性有可能会与threading出现冲突;
- 其次低级别的thread模块的同步原语很少(实际上只有一个),而threading模块则有很多;
- 再者,thread模块中当主线程结束时,所有的线程都会被强制结束掉,没有警告也不会有正常的清除工作,至少threading模块能确保重要的子线程退出后进程才退出。
注意:thread模块不支持守护线程,当主线程退出时,所有的子线程不论它们是否还在工作,都会被强行退出。而threading模块支持守护线程,守护线程一般是一个等待客户请求的服务器,如果没有客户提出请求它就在那等着,如果设定一个线程为守护线程,就表示这个线程是不重要的,在进程退出的时候,不用等待这个线程退出。
二、Threading模块
multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍
三、通过Threading.Thread类来创建线程
1 .创建线程的方式一
直接通过Threading.Thread来创建
from threading import Threadimport timedef task(name): print(f"子线程{name} is running") time.sleep(1) print(f"子线程{name} is end") # 因为创建线程不需要重新开辟内存空间,所以不用写main,创建线程只是单独把启动线程函数里面的代码拿出来用t = Thread(target=task,args=("小明",))t.start()print("主线程结束")
2 创建线程的方式二
通过自定义类来继承Thread类来创建线程
from threading import Threadimport timeclass MyDic(Thread,name): def __init__(self,name) super().__init__() self.name = name def run(self): print(f"子线程{name} is running") time.sleep(1) print(f"子线程{name} is end") t = Mydic("小明")t.start()print("主进程结束")
四、多线程和多进程的比较
1 pid的比较
"""学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:711312441寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!"""from threading import Threadfrom multiprocessing import Processimport timeimport osdef task(name): print(f"子线程{name} is running") time.sleep(1) print(f"子线程{name} is end") print(f"子线程{name}的pid:{os.getpid()}")def task1(name): print(f"进程{name} is running") time.sleep(1) print(f"进程{name} is end") print(f"进程的{name}pid:{os.getpid()}")if __name__ == "__main__": # part1:在主进程下开启多个线程,每个线程都跟主进程的pid一样 t = Thread(target=task, args=("小明",)) t.start() t.join() print(f"主线程的pid:{os.getpid()}") # 开多个进程,每一个进程的pid号都不一样 p = Process(target=task1,args=("zhangsan",)) p1 = Process(target=task1,args=("zhang",)) p.start() p1.start() p.join() p1.join() print(f"主进程的pid:{os.getpid()}")
2 线程和进程开启效率的较量
from threading import Threadfrom multiprocessing import Processimport timedef task(name): print(f"{name} is running") time.sleep(2) print(f"{name} is end")if __name__ == "__main__": t = Thread(target=task,args=("子线程",)) p = Process(target=task,args=("子进程",)) t.start() # p.start() print("主")
(1.开启线程的速度:
子线程 is running主子线程 is end
(2.开启进程的速度:
主子进程 is running子进程 is end
3 内存数据共享问题
from threading import Threadfrom multiprocessing import Processimport time,osx = 100def task(): global x x = 50 # 此时线程是在拿全局的x的值 print(os.getpid()) # 因为开启线程是不需要操作系统给线程分配内存空间的,所以线程用的是它当前所在的进程的进程号if __name__ == "__main__": # 线程 t = Thread(target=task) t.start() time.sleep(2) print(x) # 50,这里说明线程他是共享他所在进程下的所有资源,对资源进行一系列的操作 print(os.getpid()) # 进程 # p = Process(target=task) # p.start() # print(x) # 这里的x还是主进程的x 100
五、Thread类的其他方法
Thread实例对象的方法:
- isAlive():返回线程是否活动的。
- getName():返回线程名。
- setName():设置线程名。
threading模块提供的一些方法:
- threading.currentThread():返回当前的线程变量。
- threading.enumerate():返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
- threading.activeCount():返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
1 代码实例
from threading import Thread,currentThread,enumerate,activeCountimport timedef task(): print("子线程 start") time.sleep(2) print("子线程 end") print(enumerate())# 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。 print(currentThread(),"子线程") # 返回当前的线程变量 print(activeCount())if __name__ == "__main__": t1 = Thread(target=task) t2 = Thread(target=task) t1.start() t2.start() t2.setName("小明") print(t2.getName()) # 得到t2的线程名字,是我们设置好的小明 print(t1.getName()) # 得到t1的线程名子 Thread-1 print(t1.is_alive()) # True
2 join方法
"""学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:711312441寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!"""from threading import Threadimport timedef task(): print("子线程 start") time.sleep(2) print("子线程 end")t = Thread(target=task)t.start()t.join() # 等待子线程运行结束print("主线程")
六、多线程实现socket
1 服务端
import socketfrom threading import Threadsocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)socket.bind(("192.168.11.78",8004))socket.listen(5)def action(conn,addr): while True: try: msg = (conn.recv(1024)).decode("utf8").upper() print(f"客户端{addr}发送的数据为:{msg.lower()}") print(f"向客户端{addr}发送数据为",msg) conn.send(msg.encode("utf8")) except: breakif __name__ == "__main__": print("等待客户端连接:") while True: try: conn,addr = socket.accept() print(f"客户端已连接{addr}") t = Thread(target=action,args=(conn,addr)) t.start() except: print(f"客户端{addr}断开连接 !!") break
2 客户端
import socketclient = socket.socket()client.connect(("192.168.11.78",8004))while True: msg = input("输入:") if msg == "q": break client.send(msg.encode("utf8")) flag = client.recv(1024) print("接收服务端的数据为:",flag.decode("utf8"))
全球新消息丨Python教程:如何创建多线程?
Django与数据库连接
每日观察!三星手机工业设计要焕然一新了!前奔驰中国首席大牛加盟:全权操刀
世界短讯!全新红旗H6亮相2022广州国际车展:压垮合资中型轿车又一力作
B站跨年晚会节目单官宣:邓紫棋首唱《三体》片尾曲《面壁者》
焦点热讯:Kafka的终极UI工具丨Offset Explorer功能简介
提前加满 2023开年油价第一涨:预计每升多花0.21元
员工超54万!京东为一线员工薪酬福利开支超330亿元
搭配紫光展锐国产芯:微软新Surface RT预计明年夏季推出
MyBatis-ResultMap
环球视讯!魅友人物纪录片《我有一个朋友》首映 80后CEO龚昕:我的青春是魅族
世界实时:搭乘猎鹰9号火箭 韩国首个月球探测器成功入轨:位列世界第七
【新视野】《王者荣耀》2023年首个新版本定了:新英雄莱西全员免费得
焦点观察:3.0T V6发动机卖成白菜价 长城皮卡山海炮上市:22.88万起
AIRIOT答疑第3期|如何使用物联网平台的可视化组态引擎?
鲁大师12月新机性能/流畅榜发布:小米直接包揽性能榜前三!
【环球时快讯】面包车行驶中车内起火 突然爆炸车顶掀飞数米高
【环球新要闻】大礼包抄底价:良品铺子坚果礼盒1440g装49元
80后宝妈辞职后做沙滩代写:月入过万
JJJJ车厘子有多大?JJJJ车厘子价格是多少?
狱警十七在第几集出现的?狱警十七为什么杀小朵?
锰钢是什么材质的钢材?锰钢板价格多少钱一吨?
泳镜防雾剂怎么使用?游泳镜防雾剂对眼睛的伤害有哪些?
四大满贯赛事是哪些?四大满贯赛事场地类型包括哪些?
西元年是什么意思?西元年和公元年换算表
雪肌精MYV系列产品适合什么肤质?雪肌精MYV系列产品介绍
八仙过海的八仙是哪八仙?八仙过海大结局是什么?
穷兵黩武是什么意思?穷兵黩武打一生肖是什么?
接口自动化测试不想写代码?这款工具强烈推荐
当前时讯:CloudCanal对Online DDL 工具 GH-OST 和 PT-OSC 的支持
【全球新视野】手撕fft算法--fft原理和源码解析
母猪上树是什么意思?母猪上树是什么生肖动物?
变频空调制热一小时多少度电?变频空调和定频空调的区别
三星i9250是什么型号?三星i9250手机参数
金山毒霸和360卫士哪个好?金山毒霸有必要安装吗?
英雄联盟adc是什么意思?英雄联盟adc全部英雄图鉴
半导体激光器的工作原理是什么?半导体激光器的优缺点
今日热闻!理想官方详解为何L9、L8备受欢迎:全世界最先进的增程电动系统
资讯推荐:和苹果iPhone 14一样薄!vivo S16e首销:2099元起
没有科技与狠活 0添加配料表超干净!汇源果汁大促:24.8元2L
169元拿下Wi-Fi 6路由器!荣耀路由X4 Pro首销:可达1500Mbps
世界微资讯!官方剧透理想L7关键细节:皇后座后排超越豪华D级车
世界资讯:【爬虫实战项目】Python爬虫批量下载网易云音乐飙升榜并保存本地(附源码)
世界看热讯:分布式、集群、微服务、微前端、负载均衡的概念
精彩看点:苹果为延长iPhone 14 Pro灵动岛面板使用寿命!要求三星用喷墨打印密封工艺
当前热点-女子放生2.5万斤鲇鱼被起诉:偏肉食动物 入侵能力极强
天天热推荐:不愧电动爹?零下25度暴风雪中的特斯拉Model 3:电池预热45分钟后才充上电
每日快报!mini LED和LCD将要拜拜了 iPad Pro未来会升级OLED屏
能跑1200公里 长城魏牌六座旗舰SUV正式亮相:前脸大改!
关系型数据库 和 非关系型数据库
2022年这5款熟悉的产品向我们告别 太可惜了
全球快播:Lightning再见!第二大手机国印度强推USB-C接口:iPhone必须换
天天滚动:Epic今年终极一送:好评如潮游戏《羞辱》免费领!省173块
全球热推荐:纯钛杯身!小米米家保温杯Ti首批卖光了:30小时众筹金额破50万元
SSD也没人买了?未来三年增速下滑:降价吸引力也不大
世界微资讯!暴雪仍没找到人接盘!《魔兽世界》等国服将停止 网易称服务到最后一刻
世界快资讯丨博客园图片问题
环球快看点丨iPhone 15系列差异化加大:iPhone 15 Plus或大降价
全球信息:我注册B站3736天了!还记得10年前的小破站什么样吗?
每日观察!一年一度的进口游戏版号来了 这次有不少“硬货”!
要闻:威马汽车拿到四川的救命钱!但负面缠身的它还能活过来吗?
简讯:航空工业AS700民用飞艇02架首飞成功:可载9人、能飞10小时
回归童年的美好 守住童年的回忆 那些年你玩过的游戏都有呢
mysql之索引
游戏免费送 折扣超Steam Epic的冬季特卖属实有点暴力了
全球讯息:网信办通报173款APP:正“偷窥”你的隐私 赶紧卸载
速递!Python 面向对象进阶
最资讯丨10 个你需要熟悉的 CSS3 属性
当前滚动:广西现大型金属残骸 现场升起火苗:原来是火箭助推器
天天观天下!Codeforces 1336 F Journey 题解
每日精选:马斯克SpaceX公司副总裁私人飞机冲出跑道 网友:人身安全警告?
报道:浙江多地下雪 2023年第一股冷空气来了
2万多的日本水晶椅看着太像刑具:屁股瑟瑟发抖
世界动态:2023年最受期待的十款国产游戏 《黑神话:悟空》位列第一
当前头条:FreeSWITCH给Say模块增加中文语音
全球微头条丨12核Zen4又降价了 AMD锐龙9 7900X到手3259元(首发4299)
观察:小米送福利!MIX Fold 2用户花1分钱可领399元保护壳
热资讯!仍由腾讯代理!《CF》开发商新作《命运方舟》国服官宣:2023年上线
【热闻】周鸿祎:360现在的对手不再是国内同行
苹果手表血氧监测功能被指有种族偏见 在美国被告上法庭
Fiddler V5.0 英文/汉化 Windows 抓包工具 【12月29日亲测有效】
RX 7900危了 消息称RTX 4070 Ti显卡降价700元:性价比大增
当前焦点!卡丁车手比赛撞柱身亡 主办方回应:赛道由专业设计师设计
天天微资讯!Doge表情包原型柴犬患白血病和肝病:情况糟糕、生命危险
环球看热讯:明星带货表演砍价被调侃演技巅峰上热搜:律师喊话先涨再降涉嫌价格欺诈
比亚迪大屏立功 中国乘用车仪表盘平均尺寸将增至近10英寸
世界微资讯!AMD、NV让你失望了!2023年显卡价格仍将居高不下 降价希望渺茫
【天天快播报】骨折价没人要!首架波音747-8宣告报废:才飞了不到30小时
《阿凡达2》成2022全球票房亚军!仅次于《壮志凌云2》
世界通讯!今年春节乐趣不限量!PICO 4新春礼盒成年货新选择
如何选购云服务器
终极.NET混淆器丨.NET Reactor产品介绍
linux跟踪技术之ebpf
天天快报!AcWing246. 区间最大公约数
【世界独家】30层楼高、叶轮直径191米!国内单机容量最大高原山地风机成功吊装
全球今头条!19999元!铁威马发布12盘位NAS T12-450:总容量可达240TB
羊了个羊创始人没想到一季度挣了20万:公司仅7人参保
焦点速递!俞敏洪最想读的三本书:《道德经》《红楼梦》《金瓶梅》
Cubase11安装破解图文教程 【2022年12月29日亲测有效】
焦点速读:linux Makefile 如何将生成的 .o 文件放到指定文件夹