*****
本小節就乙個要求
掌握在乙個程序下開啟多個子程序與在乙個程序下開啟多個執行緒的區別
開始操作
可以發現執行的很快from threading import thread
def work():
print('hello')
if __name__ == '__main__':
for i in range(10):
t = thread(target=work)
t.start()
print('主線程/主程序')
相比較來說你會發現執行緒要更快from multiprocessing import process
def func():
print('我是子程序')
pass
if __name__ == '__main__':
for i in range(10):
p = process(target=func)
p.start()
print('主程序')
其實一想也是,開十個程序相當於十個程序+十個執行緒
那時間上指定要比十個執行緒要長
我們可以看到,因為是新開的程序,所以每個程序的id都不同import os
from multiprocessing import process
def func():
print('我是子程序', os.getpid())
pass
if __name__ == '__main__':
for i in range(10):
p = process(target=func)
p.start()
print('主程序', os.getpid())
主程序 1516
我是子程序 6800
我是子程序 440
我是子程序 1840
我是子程序 7892
我是子程序 228
我是子程序 6464
我是子程序 4628
我是子程序 4944
我是子程序 4244
我是子程序 2300
列印結果上可以看出,多執行緒的開啟時基於乙個程序開啟import os
from threading import thread
def func():
print('我是子程序', os.getpid())
pass
if __name__ == '__main__':
for i in range(10):
p = thread(target=func)
p.start()
print('主程序', os.getpid())
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
我是子程序 11228
主程序 11228
可以看到列印結果是 100from multiprocessing import process
def work():
global n
n = 0
if __name__ == '__main__':
n = 100
p = process(target=work)
p.start()
p.join()
print('主', n)
儘管在子程序裡對全域性變數中的n進行了修改,但是沒有改變主程序裡面的資料
所以可以說明,在程序中,資料是不互通的
可以看到列印結果是 0from threading import thread
def work():
global n
n = 0
if __name__ == '__main__':
n = 100
p = thread(target=work)
p.start()
p.join()
print('主', n)
在子執行緒裡對全域性變數中的n進行了修改,改變主程序裡面的資料
*****
*****
多執行緒與多程序
程序 程序是程式的一次執行,在傳統的計算機中,程序既是基本的分配單元,也是基本的執行單元。執行緒 執行緒是可執行的實體單元,它是處理機排程的基本單位。由於執行緒在同一位址空間,因此建立和撤銷執行緒的開銷小,執行緒間的通訊效率高,切換迅速。在多處理機系統中,對程序的個數有所限制,但對執行緒的個數不存在...
多執行緒與多程序
魚還是熊掌 多程序多執行緒的選擇 關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有的xdjm問 多程序好還是多執行緒好?...
多程序與多執行緒
import threading建立乙個執行緒,指向的函式,不接收引數的情況 t threading.thread target 函式名 建立乙個執行緒,指向的函式,收引數的情況 t threading.thread target 函式名,args 實參1,執行緒物件名.start 生命週期 我們的...