第九篇 并發(進程和線程)

Python里執行并發有進程和線程兩個,分布使用?threading 和multiprocessing 兩個庫,一般用的是這兩個庫里的Thread和Process

from threading import Thread   # 線程 : 同時運行from multiprocessing import Process  # 進程

進程和線程的使用場景:

1. 一般在有大量的數據(耗時)操作的時候,會用到線程和進程

2.python里要優先用進程,因為Python里的線程有個自帶的bug,全局解釋器鎖

示例1:有大貓和小貓睡覺的兩個模擬耗時的操作,如果不用并發,執行效果就是從上到下順序 串行執行的

from threading import Thread   # 線程 : 同時運行
import time, random# 模擬耗時操作:大貓和小貓睡覺
def daMaoSleep(n):print("大貓開始睡覺了,它要睡{}秒".format(n) )time.sleep(n)print("現在大貓睡醒了")def xiaoMaoSleep(n):print("小貓開始睡覺了,它要睡{}秒".format(n) )time.sleep(n)print("現在小貓睡醒了")if __name__ == '__main__':# 不適用線程和進程,是順序串行的n_da = random.randint(3,5)n_xiao = random.randint(3,6)# 使用線程庫進行并行,注意target是函數名,args是參數,參數必須是元組# target=傳參是要運行的函數,args=(n,) args是個元組,如果只有一個參數,要帶逗號的# 使用線程庫進行并行,注意target是函數名,args是參數,參數必須是元組# 執行大貓睡覺thread = Thread(target=daMaoSleep,args=(n_da,))thread.start()# 執行小貓睡覺thread = Thread(target=xiaoMaoSleep,args=(n_xiao,))thread.start()# 輸出
大貓開始睡覺了,它要睡4秒
小貓開始睡覺了,它要睡3秒
現在小貓睡醒了
現在大貓睡醒了

?

示例2:如果想讓大貓和小貓同時開始睡覺,怎么操作呢?

這里用線程的方式實現并發演示

from multiprocessing import Process  # 進程
import time, random# 模擬耗時操作:大貓和小貓睡覺
def daMaoSleep(n):print("大貓開始睡覺了,它要睡{}秒".format(n) )time.sleep(n)print("現在大貓睡醒了")def xiaoMaoSleep(n):print("小貓開始睡覺了,它要睡{}秒".format(n) )time.sleep(n)print("現在小貓睡醒了")if __name__ == '__main__':n_da = random.randint(3,5)n_xiao = random.randint(3,6)# 使用進程庫進行并行,注意target是函數名,args是參數,參數必須是元組# target=傳參是要運行的函數,args=(n,) args是個元組,如果只有一個參數,要帶逗號的# 使用進程庫進行并行,注意target是函數名,args是參數,參數必須是元組# 執行大貓睡覺process = Process(target=daMaoSleep,args=(n_da,))process.start()# 執行小貓睡覺process = Process(target=xiaoMaoSleep,args=(n_xiao,))process.start()# 輸出
大貓開始睡覺了,它要睡4秒
小貓開始睡覺了,它要睡3秒
現在小貓睡醒了
現在大貓睡醒了

注意避免踩坑:進程和線程一定要寫在?if __name__ == '__main__' 里面的,否則會報錯

進程與線程的區別:

什么是進程,什么是線程

系統要做一件事,運行一個任務,所有運行的任務通常就是一個程序;

每個運行中的程序就是一個進程,這一點在任務管理器上面可以形象的看到。

當一個程序運行時,內部可能會包含多個順序執行流,每個順序執行流就是一個線程。

?

關于進程的特性

獨立性:進程是系統中獨立存在的實體,它可以擁有自己獨立的資源,每個進程都擁有自己私有的地址空間。在沒有經過進程本身運行的情況下是不能訪問其中的內容的。

動態性:進程與程序的區別在于,程序是靜態的,進程是動態的。程序只是一個靜態的指令集合,而進程是一個正在系統中運行的指令集合。有了時間的概念,如生命周期;

并發性:進程之間,交替著執行。

?

線程,一個順序執行流;

它是進程的組成部分,一個進程可以有多個線程。

?

關于線程的特性,或是它的優勢

1、進程之間不能共享內存,單線程之間共享內存非常的容易

2、系統創建進程需要為該進程重新分配系統資源,但創建線程的代價很小。因此多線程的實現多任務并發比多進程實現并發的效率高

3、java語言內置多線程功能支持,而不是單純的作為底層操作系統的調度方式

?

總結:

一個程序運行至少一個進程,一個進程里面至少包含一個線程,線程是進程的組成部分。

線程相對于進程而言,很強大了,做到了資源的共享,資源的損耗降低,人為的手工控制程序的運行。

?

多進程通信的方式有哪些?
1. 共享內存
2. 信號
3. 信號量
4. 管道
5. socket通信

多線程的通信方式有哪些?
因為線程運作在進程里里面,所以多線程的通信方式也就是多線程的通信方式

?

不過,總的來說,目前進程和線程已經過時了,當前主流的處理方式都用消息隊列實現

?

?

?

轉載于:https://www.cnblogs.com/victorm/p/11326366.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386234.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386234.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網易嚴選Java開發三面面經:java讀文件內容

一、前言 Redis 提供了5種數據類型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每種數據類型的特點對于…

網易嚴選Java開發三面面經:mysql索引面試題

寫在前面 最近,很多小伙伴出去面試都被問到了Spring問題,關于Spring,細節點很多,面試官也非常喜歡問一些很細節的技術點。所以,在 Spring 專題中,我們盡量把Spring的每個技術細節說清楚,將透徹…

網易嚴選Java開發三面面經:南京黑馬java培訓怎么樣

個人背景 如標題所示,我的個人背景非常簡單,Java開發經驗1年半,學歷普通,2本本科畢業,畢業后出來就一直在Crud,在公司每天重復的工作對我的技術提升并沒有什么幫助,但小鎮出來的我也深知自我努…

網易架構師深入講解Java開發!BAT等大廠必問技術面試題

前言 MyBatis是目前非常流行的ORM框架,它的功能很強大,然而其實現卻比較簡單、優雅。本文主要講述MyBatis的架構設計思路,并且討論MyBatis的幾個核心部件,然后結合一個select查詢實例,深入代碼,來探究MyBa…

IOS 消息轉發

最近在看消息轉發的資料&#xff0c;發現大部分都是理論知識&#xff0c;很少有完整的代碼。現在以代碼的形式形象的解釋一下&#xff1a; 用Xcode創建一個工程 1.正常方法調用 創建一個類Person 代碼如下 Person.h代碼如下&#xff1a; #import <Foundation/Foundation.h&g…

網易資深Java架構師:java數組對象轉為list集合

前言 現在刷抖音經常可以看到一些老外街坊&#xff0c;問他們最想把什么帶回自己的國家&#xff0c;我聽過很多的回答都是&#xff1a;淘寶&#xff0c;支付寶&#xff0c;美食&#xff0c;微信&#xff0c;外賣&#xff0c;高鐵等等。 確實如此&#xff0c;隨著國家的快速發…

夯實基礎——P2084 進制轉換

題目鏈接&#xff1a;https://www.luogu.org/problem/P2084 P2084 進制轉換 題目背景 無 題目描述 今天小明學會了進制轉換&#xff0c;比如&#xff08;10101&#xff09;2 &#xff0c;那么它的十進制表示的式子就是 : 1*2^40*2^31*2^20*2^11*2^0&#xff0c; 那么請你編程實…

網易資深Java架構師:java方法的定義和使用

前言 今年因為這個疫情&#xff0c;感覺這是從工作以來過的最久的一個年了&#xff0c;在家呆的時間不是一般的久&#xff0c;算一算有好幾個月呢&#xff01;我大概是3月底快4月了才出門&#xff0c;投了超多的簡歷&#xff0c;天天面試面試面試面試面試面試面試…慶幸的是還…

PHP----學生管理系統

閑來無事花費兩天時間寫了份簡易版的學生管理系統 源碼地址:https://www.cnblogs.com/post/ReadAuth?blogId509327&PostId11333758&url%2Fbyczyz%2Fprotected%2Fp%2F11333758.html 轉載于:https://www.cnblogs.com/byczyz/p/11333760.html

網易資深Java架構師:jdkjrejvm的區別和聯系

前言 作為同時具備高性能、高可靠和高可擴展性的典型鍵值數據庫&#xff0c;Redis不僅功能強大&#xff0c;而且穩定&#xff0c;理所當然地成為了大型互聯網公司的首選。 眾多大廠在招聘的時候&#xff0c;不僅會要求面試者能簡單地使用Redis&#xff0c;還要能深入地理解底…

深度學習之開端備注

Adagrad //適合稀疏樣本 RMSprop//借鑒Adagrad的思想&#xff0c;改進使得不會出現學習率越來越低的問題 由此可見Adadelta既不需要輸入學習率等參數&#xff0c;而且表現得非常好&#xff01;&#xff01;但是我試了幾次&#xff0c;這個優化器效果極差&#xff01;&#xff0…

網易資深Java架構師:疫情對java行業的影響分析

前言 在實際開發&#xff0c;Redis使用會頻繁&#xff0c;那么在使用過程中我們該如何正確抉擇數據類型呢&#xff1f;哪些場景下適用哪些數據類型。而且在面試中也很常會被面試官問到Redis數據結構方面的問題&#xff1a; Redis為什么快呢&#xff1f;為什么查詢操作會變慢了…

ListView與.FindControl()方法的簡單練習 #2 -- ItemUpdting事件中抓取「修改后」的值

原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_20130624.aspx ListView與.FindControl()方法的簡單練習 #2 -- ItemUpdting事件中抓取「修改后」的值 本文跟上一篇文章有關連&#xff0c;請依照順序來練習&#xff1…

美團java研發崗二面:java靜態方法存儲在哪個區

思維導圖 前言 在很多時候&#xff0c;我們都可以在各種框架應用中看到ZooKeeper的身影&#xff0c;比如Kafka中間件&#xff0c;Dubbo框架&#xff0c;Hadoop等等。為什么到處都看到ZooKeeper&#xff1f; 一、 前些年&#xff0c;互聯網行業里對架構師這個崗位的標準還不是…

[學習之道] 修福不修慧,大象披瓔珞; 修慧不修福,羅漢托空缽 (學習寫程序,只靠補習上課嗎?)...

這是我的備份&#xff0c;原文請看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/17/learning-and_do-it_20140917.aspx [學習之道] 修福不修慧&#xff0c;大象披瓔珞&#xff1b; 修慧不修福&#xff0c;羅漢托空缽 (學習寫程序&#xff0c;只靠補習上課嗎&#…

阿里P8親自教你!mysql列轉行

前言 今日博主聽聞&#xff0c;現在很多培訓出來的應屆生薪資都趕上了摸爬滾打兩三年的朋友&#xff0c;講道理&#xff0c;這說不過去啊 作為同行來說&#xff0c;這個行業發展很快&#xff0c;技術更新很快&#xff0c;淘汰也很快&#xff0c;千萬不要再找借口了&#xff0…

同步、異步、多線程

1、首先明確一點&#xff0c;對于單核CPU&#xff0c;任意一個時刻只有一個線程在運行。那么既然這樣&#xff0c;多線程還有什么意義呢&#xff1f; 舉例來說&#xff0c;現在只有一個人&#xff0c;要做好幾個任務。單線程就是&#xff0c;任務一個一個地做&#xff0c;必須做…

阿里P8親自教你!熬夜整理華為最新Java筆試題

前言 Mysql的鎖機制確實非常重要&#xff0c;所以在這里做一個全面的總結整理&#xff0c;便于以后的查閱&#xff0c;也分享給大家。 Mysql的鎖機制還是有點難理解的&#xff0c;所以這篇文章采用圖文結合的方式講解難點&#xff0c;幫助大家理解&#xff0c;講解的主要內容…

JSP基礎筆記

/** #####這部分也是筆記,用于記錄JSP的相關內容* ###怎么用JSP###指令的寫法* <% 指令名字%>* *### page指令 * language > 表明jsp頁面中可以寫java代碼 * contentType > 其實即使說這個文件是什么類型&#xff0c;告訴瀏覽器我是什么內容類型&#xff0c;以及使…

阿里P8親自講解!javawhile循環語句用法

前言 作為一個已經畢業的計算機專業學長&#xff0c;其實幾年大學走來還是挺感慨萬千的。&#xff08;說明一下&#xff1a;一本&#xff0c;非958、211&#xff09; 老實說&#xff0c;上大學之前填志愿選專業的時候沒有任何打算&#xff0c;就覺得學海熬到頭了&#xff0c;向…