manage 建立共享內容生產者消費者模型使用場景
多道技術(不太清楚)
生產者消費者模型可以應用於多台機器上 分布式 可以多台計算器放著生產者,壞了幾台也不影響,穩定。
如果有多個生產者消費者那麼佇列就要基於網路,應該做成套接字。
放在main下面匯入問題——》開啟子程序涉及到乙個匯入模組的問題,不放在main下start開啟子程序匯入時會把自己又執行一次,造成重複匯入。
今日內容:
程序不是執行單位為什麼可以執行**?因為是裡面的執行緒在執行
cpu切換切的是執行緒
1.什麼是執行緒?為何有執行緒?怎麼用執行緒?
執行緒指的是一條流水線的工作流程
程序不是乙個執行單位是乙個資源單位。
乙個程序內自帶乙個執行緒,執行緒是執行單位。
每個程序內自帶乙個執行緒,執行緒才是cpu的執行單位
程序在執行本質是程序裡的執行緒在執行
乙個檔案的執行:先開闢乙個空間,生成的資料往裡面丟
執行緒的執行:空間已經由程序造好了,直接執行就行了
執行緒是乙個抽象的概念。(三個執行緒就是有三段**在執行,三個程序就是有三個記憶體空間建立)
2.開啟執行緒的兩種方式 (*****)
開執行緒不需要寫到main下,但是為了規範還是要寫main。
3 執行緒vs程序 (*****)
同一程序內的執行緒們共享該程序內的資源,不同程序內的執行緒資源肯定是隔離的。
建立執行緒的開銷比建立程序要小得多。
1、 執行緒中沒有父子關係。相較於子執行緒、主線程特殊之處在於其代變了主程序的生命週期。
主程序等待子程序結束然後結束,是為子程序**資源。
主線程等待子執行緒結束然後結束,是等待這個程序的**(其他非守護執行緒)執行完畢。
方式一:匯入thread模組建立執行緒的兩種方式from threading import
thread
import
time
deftask(name):
print('
%s is running
' %name)
time.sleep(3)
if__name__ == '
__main__':
t=thread(target=task,args=('
egon
',))
t.start()
print('
主線程'
)方式二:建立類繼承thread
from threading import
thread
import
time
class
mythread(thread):
defrun(self):
print('
%s is running
' %self.name)
time.sleep(3)
if__name__ == '
__main__':
t=mythread()
t.start()
print('
主線程')
1檢視執行緒pid:乙個程序中的執行緒pid是一樣的
1、瞅一瞅pid (process id)檢視執行緒pidfrom threading import
thread
import
time,os
deftask():
print('
%s is running
' %os.getpid())
time.sleep(3)
if__name__ == '
__main__':
t=thread(target=task,)
t.start()
print('
主線程',os.getpid()) #
乙個程序中的子執行緒pid相同
2 執行緒建立開銷小:子程序建立不需要向作業系統申請記憶體空間,直接執行程式。
3.同乙個程序中的多個執行緒共享程序的資源
from threading import共享程序內資源thread
import
time,os
x=1000
deftask():
global
x x=0
if__name__ == '
__main__':
t=thread(target=task,)
t.start()
t.join()
print('
主線程',x) #
主線程 0
執行緒的物件以及屬性
檢視當前執行緒名字(current_thread().name),active_count() 檢視當前活躍的執行緒數 ,獲得執行緒物件 enumerate(),以及檢視當前執行緒的pid
from threading import執行緒名,活躍執行緒數,執行緒物件返回thread,current_thread,active_count,enumerate
import
time,os
deftask():
print('
%s is running
' %current_thread().name) #
thread-1 is running
time.sleep(3)
print("
%s is done
"%os.getpid())
if__name__ == '
__main__':
t1=thread(target=task,name='
第乙個執行緒')
t2=thread(target=task,)
t3=thread(target=task,)
t1.start()
t2.start()
t3.start()
print(t1.is_alive()) #
true
print(active_count()) #
4print(enumerate())
多執行緒 兩種方式建立執行緒
第一種方式 繼承thread類 public class threaddemo extends thread catch interruptedexception e if s 50 public static void main string args 第二種方式 實現runnable介面 pub...
Python 開啟執行緒和程序的兩種方式
開銷 在發生開啟程序給作業系統時,作業系統需要申請記憶體空間給子程序,拷貝父程序位址空間到子程序,而開啟執行緒不需要這些步驟,因此開啟程序開銷遠大於執行緒,開啟速度為執行緒快 位址空間 程序之間位址空間是隔離的,開多個程序,每個程序都有不同的pid,但子程序的資料是來自於拷貝父程序的資料,程序之間存...
執行緒 1 建立執行緒的兩種方式
1.程序個執行緒的區別 程序 系統程式執行的最小單位,乙個程式至少有乙個程序 系統會在記憶體中開闢一塊空間用來執行程式。執行緒 程式執行任務的最小單位,執行緒不能單獨存在,必須存在與程序中,乙個程序中至少包含乙個執行緒。2.建立和啟動執行緒的兩種方式 建立執行緒的方式一 public class 類...