亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python中線程同步的實(shí)現(xiàn)

 更新時(shí)間:2025年06月17日 09:41:42   作者:菜逼の世界  
本文主要介紹了Python中線程同步的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

多線程

案例

說(shuō)明:

  • 唱歌方法 sing()
  • 跳舞方法 dance()
  • 啟用兩個(gè)線程調(diào)用
  • 主線程結(jié)束

代碼

# 導(dǎo)入線程模塊
import threading
import time


def sing(name,age):
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年齡:' + str(age))
    print('正在唱歌...')


def dance(name, age):
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年齡:' + str(age))
    print('正在跳舞...')


if __name__ == '__main__':
    # args 元組傳參
    t1 = threading.Thread(target=sing,args=('Alice', 18))
    # kwargs 對(duì)象傳參
    t2 = threading.Thread(target=dance,kwargs={'name': 'Bob', 'age': 18})
    t1.start()
    t2.start()
    print("主線程結(jié)束")

  • 運(yùn)行

在這里插入圖片描述

問(wèn)題現(xiàn)象

  • 輸出的結(jié)果和代碼的執(zhí)行順序不一致
  • 最后的主線程輸出竟然最先輸出
  • 線程的執(zhí)行是異步的并非同步
  • 那么如何讓線程同步執(zhí)行呢?請(qǐng)看下一章節(jié) 《解決辦法》

解決辦法

線程同步

  • 線程等待
  • 互斥鎖

線程等待

調(diào)用線程的等待方法: join()

  • 代碼
# 導(dǎo)入線程模塊
from threading import Thread
import time


def sing(name,age):
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年齡:' + str(age))
    print('正在唱歌...')


def dance(name, age):
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年齡:' + str(age))
    print('正在跳舞...')


if __name__ == '__main__':
    # args 元組傳參
    t1 = Thread(target=sing,args=('Alice', 18))
    # kwargs 對(duì)象傳參
    t2 = Thread(target=dance,kwargs={'name': 'Bob', 'age': 18})
    t1.start()
    t1.join()
    t2.start()
    t2.join()
    print("主線程結(jié)束")

  • 運(yùn)行

在這里插入圖片描述

互斥鎖

步驟:

  • 導(dǎo)入鎖模塊:from threading import Lock
  • 實(shí)例化鎖:lock = Lock()
  • 獲取鎖:lock.acquire()
  • 釋放鎖:lock.release()

代碼

# 導(dǎo)入線程模塊
from threading import Thread, Lock
import time


def sing(name, age):
    # 獲取鎖,用于線程同步
    lock.acquire()
    time.sleep(2)
    print('唱歌者姓名:' + name + ',年齡:' + str(age))
    print('正在唱歌...')
    # 釋放鎖,開(kāi)啟下一個(gè)線程
    lock.release()


def dance(name, age):
    # 獲取鎖,用于線程同步
    lock.acquire()
    time.sleep(2)
    print('跳舞者姓名:' + name + ',年齡:' + str(age))
    print('正在跳舞...')
    # 釋放鎖,開(kāi)啟下一個(gè)線程
    lock.release()


# 創(chuàng)建一個(gè)鎖
lock = Lock()
if __name__ == '__main__':
    # args 元組傳參
    t1 = Thread(target=sing, args=('Alice', 18))
    # kwargs 對(duì)象傳參
    t2 = Thread(target=dance, kwargs={'name': 'Bob', 'age': 18})
    t1.start()
    # t1.join()
    t2.start()
    # t2.join()
    # print("主線程結(jié)束")

運(yùn)行

在這里插入圖片描述

到此這篇關(guān)于Python中線程同步的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 線程同步內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論