python第九天(9-33)

  

一:進程

  • 進程概念
    • 進程就是一個程序運行在一個數據集上的一次動態執行過程
    • 進程一般由程序,數據集,進程控制塊組成
    • 進程控制塊:?進程控制塊用來記錄進程的外部特征,描述進程的執行變化過程,系統可以利用它來控制和管理進程,它是系統感知進程存在的唯一標志(通俗講就是記錄進程狀態信息)

二:線程

  • 線程概念
    • 一個程序至少有一個進程,一個進程至少有一個線程
    • 線程是進程的組成部分,線程是最小的執行單位
    • 進程相當于一個容器,是最小的資源單位
    • 線程共用進程的資源,線程是進程中的一個實體
    • 一個標準的線程由線程ID,當前指令指針(PC),寄存器集合和堆棧組成
    • 一個線程可以創建和撤消另一個線程

一:線程的創建與調用(threading中Thread類)

  • 創建一個主線程的子線程對象
    • t1=threading.Thread(target=read)
    • target:指向函數,arg:傳遞函數參數
  • 啟用一個子線程
    • t1.start()
    • 實際start()只是讓線程處于就緒態,開始一個線程時run()方法實現的  
 1 import threading2 import time3 def read():4     print("I am reading at %s"%time.ctime())5     time.sleep(3)6     print("i am finish reading at %s"%time.ctime())7 def music():8     print("i am listening music at %s"%time.ctime())9     time.sleep(3)
10     print("i am finish listening music at %s"%time.ctime())
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)#創建這個程序的主線程的子線程對象
13     #target:指向調用的函數,arg用于傳遞函數中的參數
14     t1.start()#啟用某個線程
15     t2=threading.Thread(target=music)
16     t2.start()
線程執行的理解

?

1.首先t1,t2與主線程開啟,直接輸出
I am reading at Thu Jan 31 12:20:38 2019
I am listening music at Thu Jan 31 12:20:38 2019
Main threading ending at Thu Jan 31 12:20:38 2019...2.倆個進程等待三秒鐘
3.最后輸出
I am finish listening music at Thu Jan 31 12:20:41 2019
I am finish reading at Thu Jan 31 12:20:41 2019

二:join的用法理解

 1 import threading2 import time3 def read():4     print("I am reading at %s"%time.ctime(),end="\n")5     time.sleep(3)6     print("I am finish reading at %s"%time.ctime(),end="\n")7 def music():8     print("I am listening music at %s"%time.ctime())9     time.sleep(5)
10     print("I am finish listening music at %s"%time.ctime(),end="\n")
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)#創建這個程序的主線程的子線程對象
13     #target:指向調用的函數,arg用于傳遞函數中的參數
14     t2=threading.Thread(target=music)
15     t1.start()  # 啟用某個線程
16     t2.start()
17     #t1.join()
18     t2.join()
19     print(r"main threading ending at %s..."%time.ctime())
join用法的理解
  • 沒有join時,主線程開子線程一起執行
  • 注釋掉t2.join()          
      • 1.執行t1,t2子線程I am reading at Thu Jan 31 13:09:39 2019I am listening music at Thu Jan 31 13:09:39 2019
        2.進入等待3秒鐘
        3.執行t1子線程和主線程I am finish reading at Thu Jan 31 13:09:42 2019
          main threading ending at Thu Jan 31 13:09:44 2019... 4.進入等待倆秒鐘 5。執行t2I am finish listening music at Thu Jan 31 13:09:44 2019
  • 注釋掉t1.join
      • 1.執行t1,t2子線程I am reading at Thu Jan 31 13:20:50 2019I am listening music at Thu Jan 31 13:20:50 2019
        2.進入等待5秒鐘,單線程1只需等待三秒鐘,所以在三秒鐘時會繼續執行ti線程I am finish reading at Thu Jan 31 13:20:53 2019
        3.在三秒鐘后在過倆秒鐘執行t2和主線程I am finish listening music at Thu Jan 31 13:23:28 2019main threading ending at Thu Jan 31 13:23:28 2019...          
  • 都不注釋
      • 1.執行t1,t2子線程I am reading at Thu Jan 31 13:26:55 2019I am listening music at Thu Jan 31 13:26:55 2019
        2,進入等待5秒,在第三秒執行t1I am finish reading at Thu Jan 31 13:26:58 2019
        3.再過倆秒執行t2和主線程I am finish listening music at Thu Jan 31 13:27:00 2019main threading ending at Thu Jan 31 13:27:00 2019...

三:總結

  在沒有join時,主線程會與子線程同時執行,但當子線程有了設置了join時,主線程會等待帶有join的子線程執行完畢再結束,如果一個進程的join設置再另一個線程開始之前,后者會在前者執行完畢再執行,如果是x.start+x.join+x1.start+x1.join。。。這種格式就成了穿行

?

  • 守護線程的概念
    • 只要主線程完成了,不管守護子線程是否完成,都要和主線程一起退出,整個Python會在所有的非守護線程結束后才會結束,即進程中沒有非守護線程存在的時候才結束

  • setDaemon方法實例理解

?

 1 import threading
 2 import time
 3 def read():
 4     print("I am reading at %s"%time.ctime(),end="\n")
 5     time.sleep(3)
 6     print("I am finish reading at %s"%time.ctime(),end="\n")
 7 def music():
 8     print("I am listening music at %s"%time.ctime())
 9     time.sleep(5)
10     print("I am finish listening music at %s"%time.ctime(),end="\n")
11 if __name__=="__main__":
12     t1=threading.Thread(target=read)
13     t2=threading.Thread(target=music)
14     t1.setDaemon(True)
15     t1.start() 
16     t2.start()
17     print(r"main threading ending at %s..."%time.ctime())
View Code
一.設置t1為守護線程是看不到效果的,因為,主進程在所有非守護線程結束了才會結束
二:設置t2為守護線程1.首先執行t1,t2和主線程執行結果: I am reading at Fri Feb  1 20:28:58 2019I am listening music at Fri Feb  1 20:28:58 2019main threading ending at Fri Feb  1 20:28:58 2019...2.由于主線程會在所有非守護線程結束后才結束,所以非守護線程t1在3秒后結束,從而主線程結束,t2被迫結束執行結果:I am finish reading at Fri Feb  1 20:29:01 2019Process finished with exit code 0        

?

# run():  線程被cpu調度后自動執行線程對象的run方法
# start():啟動線程活動。
# isAlive(): 返回線程是否活動的。
# getName(): 返回線程名。
# setName(): 設置線程名。threading模塊提供的一些方法:
# threading.currentThread(): 返回當前的線程變量。
      #<_MainThread(MainThread, started 14428)>#輸出的主線程名字MainThread # threading.enumerate(): 返回一個包含正在運行的線程的list。正在運行指線程啟動后、結束前,不包括啟動前和終止后的線程。
      #[<_MainThread(MainThread, started 13548)>, <Thread(Thread-1, started 10348)>, <Thread(Thread-2, started 18144)>]
      #從這里可以發現主線程實在所有線程結束后才結束
# threading.activeCount(): 返回正在運行的線程數量,與len(threading.enumerate())有相同的結果。

最后補充一下線程的類調用方法 https://www.cnblogs.com/yuanchenqi/articles/6248025.html 

?

    

?

    

?

?

         

?

轉載于:https://www.cnblogs.com/Mr-l/p/10337443.html

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

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

相關文章

Android Studio出現Failed to open zip file. Gradle's dependency cache may be corrupt問題的解決

刪除了/Users/tycao/.gradle/wrapper/dists目錄下對應的gradle-X.X-all目錄重新sync了

雙機熱備份和負載均衡的區別

1、雙機熱備相當于2臺服務器其中有一臺是另一臺的備機&#xff0c;也可以互為備機&#xff1b;而且這兩臺主機的數據時實時同步的&#xff1b;主機在運行服務時&#xff0c;備機處于檢測狀態&#xff0c;主機發生故障后&#xff0c;備機將接管主機的服務。2、負載均衡是在這2臺…

Python 數據類型--Bytes類型

一、Bytes類型 在Python3以后&#xff0c;字符串和bytes類型徹底分開了。字符串是以字符為單位進行處理的&#xff0c;bytes類型是以字節為單位處理的。 bytes數據類型在所有的操作和使用甚至內置方法上和字符串數據類型基本一樣&#xff0c;也是不可變的序列對象。 bytes對象只…

Android應用開發-onNewIntent()

轉載自Android中 activity 的onNewIntent函數

文件結構

C語言文件名命名的規則 1、文件標識符分為兩部分&#xff0c;即文件名前綴和后綴。文件名前綴的最前面要使用范圍限定符——模塊名&#xff08;文件名&#xff09;縮寫。 2、采用小寫字母命名文件&#xff0c;避免使用一些比較通俗的文件名&#xff0c;如&#xff1a;publi…

POJ 1187 隕石的秘密 (線性DP)

題意&#xff1a; 公元11380年&#xff0c;一顆巨大的隕石墜落在南極。于是&#xff0c;災難降臨了&#xff0c;地球上出現了一系列反常的現象。當人們焦急萬分的時候&#xff0c;一支中國科學家組成的南極考察隊趕到了出事地點。經過一番偵察&#xff0c;科學家們發現隕石上刻…

bzoj2561 最小生成樹

題意&#xff1a;給你無向圖&#xff0c;給定一條邊&#xff0c;求至少在原圖中刪去多少邊才能使它同時在某個最大生成樹和某個最小生成樹中。 解&#xff1a; 假裝我們把邊排序了&#xff0c;然后把所有邊權小于給定邊的邊都加進去了。 那么我們要刪的就是s到t的一個割。 最大…

Android應用開發—onSaveInstanceState方法什么時候被調用?

轉載自onSaveInstanceState方法什么時候被調用?&#xff08;轉載/整理&#xff09; 在 Activity 被銷毀之前被調用來保存每個實例的狀態&#xff0c;這樣就可以保證該狀態能夠從 onCreate(Bundle) 或者onRestoreInstanceState(Bundle)恢復過來。 本方法在 Activity 可能被銷毀…

記一次phpstudy重啟后Apache無法啟動

相信大家都碰到過phpstudy中Apache無法啟動的情況1、首先檢查80端口是否占用&#xff0c;有的話就管理2、檢查是否缺少vc9運行文件如果上述兩種方法還不能解決問題就進入安裝目錄中Apache的bin目錄下&#xff0c;在命令行窗口中執行httpd.exe&#xff0c;看看是否報錯。我就是在…

C#任務調度——LimitedConcurrencyLevelTaskScheduler

這是參考大佬分享的代碼寫的有問題請提出指正&#xff0c;謝謝。using Serilog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace TaskManager {class TaskFactoryMa…

同步本地遠程分支 git remote prune origin

git remote prune origin &#xff08;不常用總忘記&#xff0c;記錄下&#xff09;

264 參考幀 list0 list1

作了這么久的h264工作&#xff0c;這部分還一直從未去深入了解過&#xff0c;真是不求甚解啊&#xff0c;那幫老外的代碼也寫得太全了&#xff0c;該部分至今天才開始研究 首先參考幀這里關注的是兩種&#xff0c;p ,b ,前向參考和后向參考 由白皮書中看到&#xff0c;p幀的參…

面試官問我:什么是JavaScript閉包,我該如何回答

閉包&#xff0c;有人說它是一種設計理念&#xff0c;有人說所有的函數都是閉包。到底什么是閉包&#xff1f;這個問題在面試是時候經常都會被問&#xff0c;很多小白一聽就懵逼了&#xff0c;不知道如何回答好。這個問題也有很多朋友在公眾號給李老師留言了&#xff0c;問題表…

robotframework基礎學習(8)

變量的使用 在 Edit 標簽頁中主要分&#xff1a;加載外部文件、定義內部變量、定義元數據等三個部分。 &#xff08;1&#xff09;&#xff1a;加載外部文件Add Library&#xff1a;加載測試庫&#xff0c;主要是[PYTHON 目錄]\Lib\site-packages 里的測試庫 Add Resource&…

版本字符串比較工具接口常用接口函數

版本升級比較常用的接口&#xff0c;字符串解析&#xff0c;不是很難&#xff0c;但沒必須重復造輪子&#xff0c;保存一份網上搜到的實現&#xff1a; /*** 比較版本號的大小,前者大則返回一個正數,后者大返回一個負數,相等則返回0** param version1* param version2* return…

[藍橋杯]ALGO-188.算法訓練_P0504

Anagrams指的是具有如下特性的兩個單詞&#xff1a;在這兩個單詞當中&#xff0c;每一個英文字母&#xff08;不區分大小寫&#xff09;所出現的次數都是相同的。例如&#xff0c;Unclear和Nuclear、Rimon和MinOR都是Anagrams。編寫一個程序&#xff0c;輸入兩個單詞&#xff0…

什么是3-2混合

正如上面所述&#xff0c;電影轉換成視頻時&#xff0c;每秒24幀必須轉成每秒60場&#xff08;30幀&#xff09;。實現這一點的方法是把電影的第一幀顯示3場&#xff0c;然后把第二幀顯示2場&#xff0c;再把第三幀顯示3場&#xff0c;以此類推。這個3-2-3-2-3-2的順序就被稱為…

shell 的here document 用法、輸入/輸出重定向

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 什么是Here Document Here Document 是在Linux Shell 中的一種特殊的重定向方式&#xff0c;它的基本的形式如下 cmd << delimiter…

beta第二天

團隊成員 鄭西坤 031602542 &#xff08;隊長&#xff09; 陳俊杰 031602504陳順興 031602505張勝男 031602540廖鈺萍 031602323雷光游 031602319吳志鴻 0316206341.昨天的困難 陳順興&#xff1a;無 廖鈺萍&#xff1a;無 吳志鴻&#xff1a;沒有 雷光游&#xff1a;無 鄭西坤…

void和void *

void f(void) { // 參數void可以省略cout << "aa"<<endl; } int t 22; int *a &t; void *p; // void *可以被賦值為其他類型 p a; cout << *(int *)p; // 使用的時候必須轉到那個類型 轉載于:https://www.cnblogs.com/pjishu/p/10343587.…