Python多程序與多執行緒的使用場景詳解

2022-09-26 00:09:11 字數 3202 閱讀 7748

python多程序適用的場景:計算密集型(cpu密集型)任務

python多執行緒適用的場景:io密集型任務

計算密集型任務一般指需要做大量的邏輯運算,比如上億次的加減乘除,使用多核cpu可以併發提高計算效能。

io密集型任務一般指輸入輸出型,比如檔案的讀取,或者網路的請求,這類場景一般會遇到io阻塞,使用多核cpu來執行並不會有太高的效能提公升。

下面使用一台64核的虛擬機器來執行任務,通過示例**來區別它們,

使用多程序

from multiprocessing import process

import os, time

# 計算密集型任務

def work():

res = 0

for i in range(100 * 100 * 100 * 100): # 億次運算

res *= i

if __name__ == "__main__":

l =

print("本機為", os.cpu_count(), "核 cpu") # 本機為64核

start = time.time()

for i in range(4):

p = process(target=work) # 多程序

l.append(p)

p.start()

for p in l:

p.join()

stop = time.time()

print("計www.cppcns.com算密集型任務,多程序耗時 %s" % (stop - start))

使用多執行緒

from threading import thread

import os, time

# 計算密集型任務

def work():

res = 0

for i in ranwww.cppcns.comge(100 * 100 * 100 * 100): # 億次運算

res *= i

if __name__ == "__main__":

l =

print("本機為", os.cpu_count(), "核 cpu") # 本機為64核

start = time.time()

for i in range(www.cppcns.com4):

p = thread(target=work) # 多執行緒

l.append(p)

p.start()

for p in l:

p.join()

stop = time.time()

print("計算密集型任務,多執行緒耗時 %s" % (stop - start))

兩段**輸出:

本機為 64 核 cpu

計算密集型任務,多程序耗時 6.8642246723175程式設計客棧05

本機為 64 核 cpu

計算密集型任務,多執行緒耗時 37.91042113304138

說明:上述**中,分別使用4個多程序和4個多執行緒去執行億次運算,多程序耗時6.86s,多執行緒耗時37.91s,可見在計算密集型任務場景,使用多程序能大大提高效率。

另外,當分別使用8個多程序和8個多執行緒去執行億次運算時,耗時差距更大,輸出如下:

本機為 64 核 cpu

計算密集型任務,多程序耗時 6.811635971069336

本機為 64 核 cpu

計算密集型任務,多執行緒耗時 113.53767895698547

可見在64核的cpu機器下,同時使用8個多程序和4個多程序效率幾乎一樣。而使用多執行緒則就效率較慢。要最高效地利用cpu,計算密集型任務同時進行的數量應當等於cpu的核心數

使用多程序(4核cpu)

from multiprocessing import process

import os, time

# i/0密集型任務

def work():

time.sleep(5) # 阻塞兩秒

if __name__ == "__main__":

l =

print("本機為", os.cpu_count(), "核 cpu")

start = time.time()

for i in range(1000):

p = process(target=work) # 多程序

l.append(p程式設計客棧)

p.start()

for p in l:

p.join()

stop = time.time()

print("i/0密集型任務,多程序耗時 %s" % (stop - start))

使用多執行緒(4核cpu)

from threading import thread

import os, time

# i/0密集型任務

def work():

time.sleep(5) # 阻塞兩秒

if __name__ == "__main__":

l =

print("本機為", os.cpu_count(), "核 cpu")

start = time.time()

for i in range(1000):

p = thread(target=work) # 多執行緒

l.append(p)

p.start()

for p in l:

p.join()

stop = time.time()

print("i/0密集型任務,多執行緒耗時 %s" % (stop - start))

輸出:本機為 64 核 cpu

i/0密集型任務,多程序耗時 12.28218412399292  

本機為 64 核 cpu

i/0密集型任務,多執行緒耗時 5.399136066436768

說明:python的多執行緒有於gil鎖的存在,無論是多少核的cpu機器,也只能使用單核,從輸出結果來看,對於io密集型任務使用多執行緒比較佔優。

faq:執行多程序的io密集型任務時,報了乙個錯:

oserror: [errno 24] too many open files

原因:linux系統限制

ulimit -n

# 輸出 1024

解決:(臨時提高系統限制,重啟後失效)

ulimit -n 10240

Python 多執行緒與多程序

前言 以前玩單機或者玩小資料集,都基本不用多執行緒或多程序都能基本滿足需求了 所以沒怎麼了解這方面的東西。但現在玩幾百萬甚至上千萬的資料,甚至集群等東西之後,就有必要學習多執行緒或多程序了。在python中首先要匯入相關的模組 import threading as td import multip...

python 多執行緒與多程序

程序與執行緒的區別 程序 應用程式的執行例項,每乙個執行中的程式就是乙個程序 執行緒 程序的組成部分,乙個程序可以擁有多個執行緒 在多執行緒中,會有乙個主線程來完成整個程序從開始到結束的全部操作,而其他的執行緒會在主線程的執行過程中被建立或退出。python景區賣票系統 多執行緒的應用 import...

Python多執行緒與多程序

python多執行緒與多程序 程序 process 和執行緒 thread 是非常抽象的概念,也是程式設計師必需掌握的核心知識!多程序和多執行緒程式設計對於 的併發執行,提公升 效率和縮短執行時間至關重要。程序 process 和執行緒 thread 程序是作業系統分配資源的最小單元 執行緒是作業系...