您好,登錄后才能下訂單哦!
對(duì)于python線程相關(guān)的函數(shù)本文不再做詳細(xì)講解,如果想學(xué)習(xí)線程threading內(nèi)容請(qǐng)參考:python 線程創(chuàng)建和參數(shù)傳遞???
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | # !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個(gè)人博客地址): shuopython.com @WeChat Official Account(微信公眾號(hào)):猿說python @Github:www.github.com ? @File:python_threading.py @Time:2019/12/21 21:25 ? @Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅(jiān)持不懈地積累! """ ? import threading ? ? def study_info(*args,**kwargs): ????print(args,kwargs) ? def main(): ? ????# 信息列表 ????list_info = [{"name":"python 基礎(chǔ)","progress":"10%"}, ???????????????? {"name": "python 面向?qū)ο?, "progress": "20%"}, ???????????????? {"name": "python 爬蟲", "progress": "30%"}, ???????????????? {"name": "python pyqt5", "progress": "40%"}, ???????????????? {"name": "python 數(shù)據(jù)結(jié)構(gòu)", "progress": "50%"},] ? ????# 創(chuàng)建線程 ????for i in range(5): ????????p = threading.Thread(target=study_info,args=(i,),kwargs=list_info[i]) ????????# 啟動(dòng)線程 ????????p.start() ? ? if __name__ == "__main__": ????main() |
輸出結(jié)果:
1 2 3 4 5 | (0,) {'name': 'python 基礎(chǔ)', 'progress': '10%'} (1,) {'name': 'python 面向?qū)ο?, 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數(shù)據(jù)結(jié)構(gòu)', 'progress': '50%'} |
?
?
對(duì)于python進(jìn)程相關(guān)的函數(shù)本文不再做詳細(xì)講解,如果想學(xué)習(xí)進(jìn)程Process內(nèi)容請(qǐng)參考:python 進(jìn)程Process
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from multiprocessing import Process ? ? def study_info(*args,**kwargs): ????print(args,kwargs) ? def main(): ? ????# 信息列表 ????list_info = [{"name":"python 基礎(chǔ)","progress":"10%"}, ???????????????? {"name": "python 面向?qū)ο?, "progress": "20%"}, ???????????????? {"name": "python 爬蟲", "progress": "30%"}, ???????????????? {"name": "python pyqt5", "progress": "40%"}, ???????????????? {"name": "python 數(shù)據(jù)結(jié)構(gòu)", "progress": "50%"},] ? ????# 創(chuàng)建進(jìn)程 ????for i in range(5): ????????p = Process(target=study_info,args=(i,),kwargs=list_info[i]) ????????# 啟動(dòng)進(jìn)程 ????????p.start() ? if __name__ == "__main__": ????main() |
輸出結(jié)果:
1 2 3 4 5 | (0,) {'name': 'python 基礎(chǔ)', 'progress': '10%'} (1,) {'name': 'python 面向?qū)ο?, 'progress': '20%'} (2,) {'name': 'python 爬蟲', 'progress': '30%'} (3,) {'name': 'python pyqt5', 'progress': '40%'} (4,) {'name': 'python 數(shù)據(jù)結(jié)構(gòu)', 'progress': '50%'} |
?
?
1.一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程(線程是計(jì)算機(jī)的最小單位);
2.資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源,進(jìn)程與進(jìn)程之間資源相互獨(dú)立,互不影響(類似深拷貝);
3.多進(jìn)程模式最大的優(yōu)點(diǎn)就是穩(wěn)定性高,因?yàn)橐粋€(gè)子進(jìn)程崩潰了,不會(huì)影響主進(jìn)程和其他子進(jìn)程,多進(jìn)程模式的缺點(diǎn)是在Windows下創(chuàng)建進(jìn)程開銷巨大。另外,操作系統(tǒng)能同時(shí)運(yùn)行的進(jìn)程數(shù)也是有限的,在內(nèi)存和CPU的限制下,如果有幾千個(gè)進(jìn)程同時(shí)運(yùn)行,操作系統(tǒng)連調(diào)度都會(huì)成問題(進(jìn)程的創(chuàng)建比線程的創(chuàng)建更加占用計(jì)算機(jī)資源);
4.多線程模式致命的缺點(diǎn)就是任何一個(gè)線程掛掉都可能直接造成整個(gè)進(jìn)程崩潰,因?yàn)樗芯€程共享進(jìn)程的內(nèi)存;
5.由于GIL鎖的緣故,python 中線程實(shí)際上是并發(fā)運(yùn)行(即便有多個(gè)cpu,線程會(huì)在其中一個(gè)cpu來回切換,只占用一個(gè)cpu資源),而進(jìn)程才是真正的并行(同時(shí)執(zhí)行多個(gè)任務(wù),占用多個(gè)cpu資源),下面關(guān)于并行和并發(fā)做一個(gè)簡(jiǎn)單的了解;
?
并行是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生,python中的進(jìn)程屬于并行,能充分利用計(jì)算機(jī)資源,效率最高,同時(shí)執(zhí)行多個(gè)任務(wù),占用多個(gè)cpu資源;
并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔發(fā)生,python中的線程屬于并發(fā),不管計(jì)算機(jī)有多少個(gè)CPU,不管你開了多少個(gè)線程,同一時(shí)間多個(gè)任務(wù)會(huì)在其中一個(gè)CPU來回切換,只占用一個(gè)CPU,效率并不高;
關(guān)于并行和并發(fā)我們留到后面GIL鎖在詳細(xì)講解;
?
?
1.python 進(jìn)程Process
2.python 線程threading
3.python列表推導(dǎo)式
4.python字典推導(dǎo)式
?
轉(zhuǎn)載請(qǐng)注明:猿說Python???python 線程threading與進(jìn)程Process區(qū)別
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。