溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python 進(jìn)程Process與線程threading區(qū)別

發(fā)布時(shí)間:2020-07-31 03:38:51 來源:網(wǎng)絡(luò) 閱讀:253 作者:qq5d6f345f0205e 欄目:編程語(yǔ)言

一.線程threading創(chuàng)建

對(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%'}

?

?

二.進(jìn)程Process創(chuàng)建

對(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%'}

?

?

三.進(jìn)程Process和線程threading區(qū)別

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)單的了解;

?

四.關(guān)于線程并發(fā)和進(jìn)程并行的簡(jiǎn)單介紹

并行是指兩個(gè)或者多個(gè)事件在同一時(shí)刻發(fā)生,python中的進(jìn)程屬于并行能充分利用計(jì)算機(jī)資源,效率最高同時(shí)執(zhí)行多個(gè)任務(wù),占用多個(gè)cpu資源;python 進(jìn)程Process與線程threading區(qū)別

并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔發(fā)生,python中的線程屬于并發(fā)不管計(jì)算機(jī)有多少個(gè)CPU,不管你開了多少個(gè)線程,同一時(shí)間多個(gè)任務(wù)會(huì)在其中一個(gè)CPU來回切換,只占用一個(gè)CPU,效率并不高;

python 進(jìn)程Process與線程threading區(qū)別

關(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ū)別


向AI問一下細(xì)節(jié)

免責(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)容。

AI