中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中Process和threading有什么區別

發布時間:2020-06-10 14:13:36 來源:億速云 閱讀:713 作者:元一 欄目:編程語言

概述

Python是一種跨平臺的計算機程序設計語言。 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。最初被設計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用于獨立的、大型項目的開發。

進程(Process)是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。

線程(英語:threading)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。在Unix System V及SunOS中也被稱為輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱為線程。

一.線程threading創建

對于python線程相關的函數本文不再做詳細講解,如果想學習線程threading內容請參考:python 線程創建和參數傳遞   

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(個人博客地址): shuopython.com

@WeChat Official Account(微信公眾號):猿說python

@Github:www.github.com

 

@File:python_threading.py

@Time:2019/12/21 21:25

 

@Motto:不積跬步無以至千里,不積小流無以成江海,程序人生的精彩需要堅持不懈地積累!

"""

 

import threading

 

 

def study_info(*args,**kwargs):

    print(args,kwargs)

 

def main():

 

    # 信息列表

    list_info = [{"name":"python 基礎","progress":"10%"},

                 {"name": "python 面向對象", "progress": "20%"},

                 {"name": "python 爬蟲", "progress": "30%"},

                 {"name": "python pyqt5", "progress": "40%"},

                 {"name": "python 數據結構", "progress": "50%"},]

 

    # 創建線程

    for i in range(5):

        p = threading.Thread(target=study_info,args=(i,),kwargs=list_info[i])

        # 啟動線程

        p.start()

 

 

if __name__ == "__main__":

    main()

輸出結果:

1

2

3

4

5

(0,) {'name': 'python 基礎', 'progress': '10%'}

(1,) {'name': 'python 面向對象', 'progress': '20%'}

(2,) {'name': 'python 爬蟲', 'progress': '30%'}

(3,) {'name': 'python pyqt5', 'progress': '40%'}

(4,) {'name': 'python 數據結構', 'progress': '50%'}

 

 

二.進程Process創建

對于python進程相關的函數本文不再做詳細講解,如果想學習進程Process內容請參考:python 進程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 基礎","progress":"10%"},

                 {"name": "python 面向對象", "progress": "20%"},

                 {"name": "python 爬蟲", "progress": "30%"},

                 {"name": "python pyqt5", "progress": "40%"},

                 {"name": "python 數據結構", "progress": "50%"},]

 

    # 創建進程

    for i in range(5):

        p = Process(target=study_info,args=(i,),kwargs=list_info[i])

        # 啟動進程

        p.start()

 

if __name__ == "__main__":

    main()

輸出結果:

1

2

3

4

5

(0,) {'name': 'python 基礎', 'progress': '10%'}

(1,) {'name': 'python 面向對象', 'progress': '20%'}

(2,) {'name': 'python 爬蟲', 'progress': '30%'}

(3,) {'name': 'python pyqt5', 'progress': '40%'}

(4,) {'name': 'python 數據結構', 'progress': '50%'}

 

 

三.進程Process和線程threading區別

1)地址空間和其它資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其它進程不可見。
2)通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變量)來進行通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
3)調度和切換:線程上下文切換比進程上下文切換要快得多。
4)在多線程OS中,進程不是一個可執行的實體。1.一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程(線程是計算機的最小單位);

2.資源分配給進程,同一進程的所有線程共享該進程的所有資源,進程與進程之間資源相互獨立,互不影響(類似深拷貝);

3.多進程模式最大的優點就是穩定性高,因為一個子進程崩潰了,不會影響主進程和其他子進程,多進程模式的缺點是在Windows下創建進程開銷巨大。另外,操作系統能同時運行的進程數也是有限的,在內存和CPU的限制下,如果有幾千個進程同時運行,操作系統連調度都會成問題(進程的創建比線程的創建更加占用計算機資源);

4.多線程模式致命的缺點就是任何一個線程掛掉都可能直接造成整個進程崩潰,因為所有線程共享進程的內存;

5.由于GIL鎖的緣故,python 中線程實際上是并發運行(即便有多個cpu,線程會在其中一個cpu來回切換,只占用一個cpu資源),而進程才是真正的并行(同時執行多個任務,占用多個cpu資源),下面關于并行和并發做一個簡單的了解;

 

四.關于線程并發和進程并行的簡單介紹

并行是指兩個或者多個事件在同一時刻發生,python中的進程屬于并行能充分利用計算機資源效率最高同時執行多個任務,占用多個cpu資源;python中Process和threading有什么區別

并發是指兩個或多個事件在同一時間間隔發生,python中的線程屬于并發不管計算機有多少個CPU,不管你開了多少個線程,同一時間多個任務會在其中一個CPU來回切換,只占用一個CPU,效率并不高;

python中Process和threading有什么區別



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新沂市| 依安县| 海口市| 巴里| 永济市| 阿荣旗| 方城县| 长治市| 信丰县| 兴化市| 深圳市| 金堂县| 固安县| 洪洞县| 文成县| 定陶县| 新泰市| 来凤县| 台前县| 平果县| 保靖县| 大余县| 广灵县| 林芝县| 崇州市| 宣城市| 三明市| 阿勒泰市| 五家渠市| 玉环县| 永昌县| 蕉岭县| 黑龙江省| 民勤县| 淮北市| 浦东新区| 广南县| 土默特右旗| 蒙阴县| 甘泉县| 洪洞县|