程序與執行緒

2021-07-23 21:11:37 字數 2007 閱讀 6894

程序模組。

常用方法

cpu_count():獲取當前的電腦的cpu個數。

表示乙個程序。

start():啟動乙個程序。

join():等待子程序結束後,再執行父程序。如:

import os

from multiprocessing import process # process是跨平台的程序

def fun(*args,**kwargs):

for arg in args:

print(arg) # 依次輸出arg1,arg2

for key, value in kwargs.items():

print("key = %s,value = %s" % (key, value)) # 依次輸出key = key1,value = value1等

print("process %s-%s" % (os.getpid(), os.getppid()))

# process 6848-7560

if __name__ == '__main__':

print("主程序%s"%os.getpid()) # 主程序7560

p = process(target=fun, args=('arg1','arg2'),kwargs=)

p.start()

p.join()

print("主程序end") # 最後執行,等所有子程序都結束後才執行

__init__:建構函式。target關鍵字指向子程序要執行的**,args是乙個元組,指的是向**中傳遞的引數,kwargs是乙個字典,也是向子程序中傳遞的引數。

程序池。

__init__:可以指定快取的程序的個數。如果獲取的程序超過這個個數,則必須等待已有的程序結束後才會獲取到新的程序。

close():關閉程序池,呼叫後無法向該程序池中傳入新程序。

join():程序池中程序都結束後,父程序才會繼續執行。必須在close()方法後執行。如:

import os,time,random

from multiprocessing import pool # process是跨平台的程序

def f(name):

print("name = %s,pid = %s,ppid = %s" % (name, os.getpid(),os.getppid()))

time.sleep(random.random()*3) # 每乙個程序休息一會兒,這樣會導致pool不停地

if __name__ == '__main__':

print(os.getpid())

p = pool(3)

for x in range(1,6):

p.close()

p.join()

執行時,可以發現先執行三個程序,而且pid只有三個——因為pool中的引數指定的是3,它規定了這個程序池中最多只有三個程序,當用完之後必須等某乙個程序**之後才會再次分配出去執行其餘的**。

執行緒模組。

代表乙個執行緒。

__init__:建構函式。target指該執行緒要執行的**,args是傳入的引數,name指該執行緒的名字。

start():啟動該執行緒。

join():等該執行緒結束後再執行別的**。這兩個方法都與process類似。

鎖,用於執行緒同步。通過threading模組中的lock()方法獲取乙個lock物件。

acquire():為某一段**加鎖,加鎖之後該**一次只能允許乙個執行緒進行訪問。

release():釋放鎖。

程序與執行緒

程序 process 管理單元,管理分配應用程式的資料,的記憶體空間.執行緒 thread 執行單元,執行緒負責執行乙個預先編排好的 段,執行 棧是基於執行緒的.乙個應用程式啟動的時候,程序自動建立,並且會預設建立主線程,主線程負責執行main 方法.thread t new thread new ...

程序與執行緒

程序 是擁有資源的實體,包括 1。乙個程序有乙個虛擬位址空間,不同程序位於不同的 虛擬位址空間中。程序之間若要通訊,必須通過作業系統 的功能呼叫 ipc 2。程序擁有其他資源,例如開啟的檔案和i o裝置。程序結束時,作業系統會自動釋放該程序擁有的所有資源。例如,如果 open乙個檔案而不close它...

程序與執行緒

程序包括 1 私有的虛位址空間 2 可執行程式 與資料 3 開啟系統資源列表控制代碼 4 安全訪問標誌 5 程序id 6 至少有乙個執行執行緒 執行緒包括 1 一組cpu暫存器狀態 2 兩個堆疊 系統態與使用者態 3 tls 執行緒區域性儲存區 4 執行緒id 5 安全特性 因此程序是不活潑的,它從...