1. 程式人生 > 程式設計 >python 多執行緒中join()的作用

python 多執行緒中join()的作用

一 前言

溫習python 多程序語法的時候,對 join的理解不是很透徹,本文通過程式碼實踐來加深對 join()的認識。

multiprocessing 是python提供的跨平臺版本的多程序模組。multiprocessing可以充分利用多核,提升程式執行效率。multiprocessing支援子程序,通訊和共享資料,執行不同形式的同步,提供了Process、Queue、Pipe、Lock等元件。不過今天重點了解 join。後續文章會逐步學習介紹其他元件或者功能。

二 動手實踐

join()方法可以在當前位置阻塞主程序,帶執行join()的程序結束後再繼續執行主程序的程式碼邏輯。

# encoding: utf-8
"""
author: [email protected]
time: 2019/7/30 11:20 AM
func:
"""

from multiprocessing import Process
import os
import time

def now():
  return str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))


def func_1(name):
  print(now() + ' Run child process %s (%s)...' % (name,os.getpid()))
  time.sleep(4)
  print(now() + ' Stop child process %s (%s)...\n' % (name,os.getpid()))


def func_2(name):
  print(now() + ' Run child process %s (%s)...' % (name,os.getpid()))
  time.sleep(8)
  print(now() + ' hello world!')
  print(now() + ' Stop child process %s (%s)...\n' % (name,os.getpid()))


if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1,args=('func_1',))
  p2 = Process(target=func_2,args=('func_2',))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join()
  p2.join()
  print now() + ' Process end .'

輸出結果

python 多執行緒中join()的作用

結果顯示

主程序的 Process end .是在func1 和func2 結束之後才打印出來的。

2.2 去掉 join() 函式

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1,))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  print now() + ' Process end .'

結果如下:

python 多執行緒中join()的作用

2.3 去掉func_2 的 join()

if __name__ == '__main__':
  print ('Parent process %s.' % os.getpid())
  p1 = Process(target=func_1,))
  print now() + ' Process start.'
  p1.start()
  p2.start()
  p1.join() ### 在p1 執行完之後 。不等待p2 執行,主程序結束。
  print now() + ' Process end .'

結果如下:

python 多執行緒中join()的作用

結果顯示主執行緒 "Process end"在func_1 執行結束之後輸出而沒有等待func_2 執行完畢。

2.4 小結

利用多執行緒時,一般都先讓子執行緒呼叫start() ,然後再去呼叫join(),讓主程序等待子程序結束才繼續走後續的邏輯。

思考題

能不能每個子程序呼叫start() 之後,然後直接呼叫join() 類似:

p1.start()p1.join()p2.start()p2.join()

以上就是python 多執行緒中join()的作用的詳細內容,更多關於python 多執行緒join()的資料請關注我們其它相關文章!