python多執行緒與多程序中join 作用詳解

2021-08-16 23:47:13 字數 2354 閱讀 1800

python多執行緒與多程序中join()方法的效果是相同的。

下面以多執行緒為例:

join所完成的工作就是執行緒同步,即主線程任務結束之後,進入阻塞狀態,一直等待其他的子執行緒執行結束之後,主線程再終止

沒有join的情況下:

import threading

import time

def run():

time.sleep(2)

print('當前執行緒的名字是: ', threading.current_thread().name)

time.sleep(2)

start_time = time.time()

print('這是主線程:', threading.current_thread().name)

thread_list =

for i in range(5):

t = threading.thread(target=run)

for t in thread_list:

t.start()

print('主線程結束!' , threading.current_thread().name)

print('一共用時:', time.time()-start_time)

執行效果:
這是主線程: mainthread

主線程結束! mainthread

一共用時: 0.0010018348693847656

當前執行緒的名字是: thread-3

當前執行緒的名字是: thread-4

當前執行緒的名字是: thread-2

當前執行緒的名字是: thread-1

當前執行緒的名字是: thread-5

process finished with exit code 0

結果分析:

1.我們的計時是對主線程計時,主線程結束,計時隨之結束,列印出主線程的用時。

2.主線程的任務完成之後,主線程隨之結束,子執行緒繼續執行自己的任務,直到全部的子執行緒的任務全部結束,程式結束。

有join的情況下:

import threading

import time

def run():

time.sleep(2)

print('當前執行緒的名字是: ', threading.current_thread().name)

time.sleep(2)

start_time = time.time()

print('這是主線程:', threading.current_thread().name)

thread_list =

for i in range(5):

t = threading.thread(target=run)

for t in thread_list:

t.setdaemon(true)

t.start()

for t in thread_list:

t.join()

print('主線程結束了!' , threading.current_thread().name)

print('一共用時:', time.time()-start_time)

執行結果:

這是主線程: mainthread

當前執行緒的名字是: thread-1

當前執行緒的名字是: thread-5

當前執行緒的名字是: thread-3

當前執行緒的名字是: thread-2

當前執行緒的名字是: thread-4

主線程結束了! mainthread

一共用時: 4.003001928329468

process finished with exit code 0

結果分析:

1.可以看到,主線程一直等待全部的子執行緒結束之後,主線程自身才結束,程式退出

join有乙個timeout引數:

當設定守護執行緒時,含義是主線程對於子執行緒等待timeout的時間將會殺死該子執行緒,最後退出程式。所以說,如果有10個子執行緒,全部的等待時間就是每個timeout的累加和。簡單的來說,就是給每個子執行緒乙個timeout的時間,讓他去執行,時間一到,不管任務有沒有完成,直接殺死。

沒有設定守護執行緒時,主線程將會等待timeout的累加和這樣的一段時間,時間一到,主線程結束,但是並沒有殺死子執行緒,子執行緒依然可以繼續執行,直到子執行緒全部結束,程式退出。

詳情請看:

Python 多執行緒與多程序

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

python 多執行緒與多程序

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

Python多執行緒與多程序

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