电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python之多進程與多線程的使用

瀏覽:128日期:2022-06-27 11:24:20
進程與線程

想象在學校的一個機房,有固定數量的電腦,老師安排了一個爬蟲任務讓大家一起完成,每個學生使用一臺電腦爬取部分數據,將數據放到一個公共數據庫。共同資源就像公共數據庫,進程就像每一個學生,每多一個學生,就多一個進程來完成這個任務,機房里的電腦數量就像CPU,所以進程數量是CPU決定的,線程就像學生用一臺電腦開多個爬蟲,爬蟲數量由每臺電腦的運行內存決定。一個CPU可以有多個進程,一個進程有一個或多個線程。

多進程

1、導包

from multiprocessing import Process

2、寫兩個任務也就是兩個函數

3、創建一個進程進程名字 = Process(target=函數名字,函數參數傳字典或元組,是否守護進程)

4、啟動進程進程名字.start()

5、是否開啟進程守護,一般主進程會等待子進程執行完畢后再關閉程序。當我們想程序主進程跑完,直接銷毀掉未完成的子進程,關閉程序的話,加上一句代碼 :1.創建進程的時候傳參數daemon=True2.進程名字.daemon=True

6、進程編號導包os獲取當前進程編號

os.getpid()

獲取當前父進程的編號

os.getppid()

代碼示例(未開啟進程守護)

from multiprocessing import Processimport timeimport os# 一個寫作業函數def homeWork(name, count): for i in range(count): # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 打印當前父進程編號os.getppid() print('當前父進程編號:', os.getppid()) print(name, '正在寫作業...') time.sleep(0.2)# 一個打游戲函數def game(name, count): for i in range(count): # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 打印當前父進程編號os.getppid() print('當前父進程編號:', os.getppid()) print(name, '正在打游戲...') time.sleep(0.2)if __name__ == ’__main__’: # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 進程1寫作業 元組傳參 p1 = Process(target=homeWork, args=('進程1', 10)) # 進程2打游戲 字典傳參 p2 = Process(target=game, kwargs={'name': '進程2', 'count': 10}) # 啟動進程 p1.start() p2.start() time.sleep(1) print('主進程結束---------------------------------------------')

未開啟線程守護的運行結果:

# 可以看到主進程結束的,其子進程還在繼續當前進程編號: 14972當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...主進程結束---------------------------------------------當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...當前進程編號: 5732當前父進程編號: 14972進程1 正在寫作業...當前進程編號: 14752當前父進程編號: 14972進程2 正在打游戲...

Process finished with exit code 0

代碼示例(開啟進程守護)

from multiprocessing import Processimport timeimport os# 一個寫作業函數def homeWork(name, count): for i in range(count): # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 打印當前父進程編號os.getppid() print('當前父進程編號:', os.getppid()) print(name, '正在寫作業...') time.sleep(0.2)# 一個打游戲函數def game(name, count): for i in range(count): # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 打印當前父進程編號os.getppid() print('當前父進程編號:', os.getppid()) print(name, '正在打游戲...') time.sleep(0.2)if __name__ == ’__main__’: # 打印當前進程編號os.getpid() print('當前進程編號:', os.getpid()) # 進程1寫作業 元組傳參 第一種方法啟動進程守護 p1 = Process(target=homeWork, args=('進程1', 10), daemon=True) # 進程2打游戲 字典傳參 p2 = Process(target=game, kwargs={'name': '進程2', 'count': 10}) # 第二種 p2.daemon = True # 啟動進程 p1.start() p2.start() time.sleep(1) print('主進程---------------------------------------------')

開啟進程守護的運行結果

當前進程編號: 372當前進程編號: 10116當前進程編號: 9860當前父進程編號: 372進程1 正在寫作業...當前父進程編號: 372進程2 正在打游戲...當前進程編號: 9860當前進程編號: 10116當前父進程編號: 372進程2 正在打游戲...當前父進程編號: 372進程1 正在寫作業...當前進程編號: 9860當前進程編號: 10116當前父進程編號: 372進程1 正在寫作業...當前父進程編號: 372進程2 正在打游戲...當前進程編號: 9860當前進程編號: 10116當前父進程編號: 372進程1 正在寫作業...當前父進程編號: 372進程2 正在打游戲...主進程結束---------------------------------------------

Process finished with exit code 0

多線程

1、導包

import threading

2、寫兩個任務也就是兩個函數

3、創建一個線程線程名字 = threading.Thread(target=函數名字,函數參數傳字典或元組,是否守護進程)

4、啟動線程線程名字.start()

5、是否開啟線程守護,一般當前程序會等待子線程執行完畢后再關閉程序。當我們想程序跑完,銷毀掉未完成的子線程,直接關閉程序的話,加上一句代碼 :1.創建線程的時候傳參數daemon=True2.線程名字.daemon=True

6、線程編號獲取當前線程編號

threading.current_thread()

代碼示例(未開啟進程守護)

import threadingimport time# 一個寫作業函數def homeWork(name, count): for i in range(count): # 打印當前線程 print(threading.current_thread()) print(name, '正在寫作業...') time.sleep(0.2)# 一個打游戲函數def game(name, count): for i in range(count): # 打印當前線程 print(threading.current_thread()) print(name, '正在打游戲...') time.sleep(0.2)if __name__ == ’__main__’: # 線程1寫作業 元組傳參 t1 = threading.Thread(target=homeWork, args=('進程1', 10)) # 線程2打游戲 字典傳參 t2 = threading.Thread(target=game, kwargs={'name': '進程2', 'count': 10}) # 啟動進程 t1.start() t2.start() time.sleep(1) print('主進程結束###################################################################################')

未開啟線程守護的運行結果

# 可以看到主進程結束的,其線程還在繼續<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-2, started 9100)>進程2 正在打游戲...主進程結束###################################################################################<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-1, started 3364)><Thread(Thread-2, started 9100)>進程2 正在打游戲...進程1 正在寫作業...<Thread(Thread-1, started 3364)>進程1 正在寫作業...<Thread(Thread-2, started 9100)>進程2 正在打游戲...<Thread(Thread-2, started 9100)><Thread(Thread-1, started 3364)>進程1 進程2正在寫作業... 正在打游戲...<Thread(Thread-2, started 9100)><Thread(Thread-1, started 3364)>

進程2 進程1 正在打游戲...正在寫作業...

Process finished with exit code 0

代碼示例(開啟線程守護)

import threadingimport time# 一個寫作業函數def homeWork(name, count): for i in range(count): # 打印當前線程 print(threading.current_thread()) print(name, '正在寫作業...') time.sleep(0.2)# 一個打游戲函數def game(name, count): for i in range(count): # 打印當前線程 print(threading.current_thread()) print(name, '正在打游戲...') time.sleep(0.2)if __name__ == ’__main__’: # 線程1寫作業 元組傳參 t1 = threading.Thread(target=homeWork, args=('進程1', 10), daemon=True) # 線程2打游戲 字典傳參 t2 = threading.Thread(target=game, kwargs={'name': '進程2', 'count': 10}) t2.daemon = True # 啟動進程 t1.start() t2.start() time.sleep(1) print('主進程結束###################################################################################')

開啟線程守護的運行結果

<Thread(Thread-1, started daemon 15480)>進程1 正在寫作業...<Thread(Thread-2, started daemon 13700)>進程2 正在打游戲...<Thread(Thread-2, started daemon 13700)>進程2 正在打游戲...<Thread(Thread-1, started daemon 15480)>進程1 正在寫作業...<Thread(Thread-1, started daemon 15480)><Thread(Thread-2, started daemon 13700)>進程1 進程2 正在寫作業...正在打游戲...

<Thread(Thread-2, started daemon 13700)><Thread(Thread-1, started daemon 15480)>

進程1進程2 正在寫作業... 正在打游戲...

<Thread(Thread-1, started daemon 15480)>進程1 正在寫作業...<Thread(Thread-2, started daemon 13700)>進程2 正在打游戲...主進程結束###################################################################################

Process finished with exit code 0

到此這篇關于Python之多進程與多線程的使用的文章就介紹到這了,更多相關Python 多進程與多線程內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 联系我们-腾龙公司上分客服微信19116098882 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | [品牌官网]贵州遵义双宁口腔连锁_贵州遵义牙科医院哪家好_种植牙_牙齿矫正_原华美口腔 | 科箭WMS仓库管理软件-TMS物流管理系统-科箭SaaS云服务 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 广州/东莞小字符喷码机-热转印打码机-喷码机厂家-广州瑞润科技 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 楼承板-开口楼承板-闭口楼承板-无锡海逵 | 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 消电检公司,消电检价格,北京消电检报告-北京设施检测公司-亿杰(北京)消防工程有限公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | IHDW_TOSOKU_NEMICON_EHDW系列电子手轮,HC1系列电子手轮-上海莆林电子设备有限公司 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 铁盒_铁罐_马口铁盒_马口铁罐_铁盒生产厂家-广州博新制罐 | ph计,实验室ph计,台式ph计,实验室酸度计,台式酸度计 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 风化石头制砂机_方解石制砂机_瓷砖石子制砂机_华盛铭厂家 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 丝杆升降机-不锈钢丝杆升降机-非标定制丝杆升降机厂家-山东鑫光减速机有限公司 | 低合金板|安阳低合金板|河南低合金板|高强度板|桥梁板_安阳润兴 北京租车牌|京牌指标租赁|小客车指标出租 | 谷歌关键词优化-外贸网站优化-Google SEO小语种推广-思亿欧外贸快车 |