中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python多線程如何使用

發布時間:2022-04-12 09:07:01 來源:億速云 閱讀:156 作者:iii 欄目:開發技術

今天小編給大家分享一下Python多線程如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一,實用方法

  • 1.線程之間執行是無序的,cpu調度哪個線程就執行哪個線程;

  • 2.主線程等待所有子線程結束后再結束,設置守護線程可以實現當主線程結束時子線程立馬結束;

  • 3.設置守護線程:1.threading.Thread(daemon=True),2.線程對象.setDaemon(True);

  • 4.線程之間共享全局變量,存在資源競爭問題。

'''
線程之間執行是無序的,cpu調度哪個線程就執行哪個線程
主線程會等待所有子線程結束之后再結束,設置守護線程可以實現當主線程結束時子線程立馬結束
設置守護線程:1.threading.Thread(daemon=True),2.線程對象.setDaemon(True)
線程之間共享全局變量,存在資源競爭問題
'''
 
 
# 導入模塊(模塊名.py,包名init.py)
import threading
import time
 
 
def task1(count):
    # 獲取當前線程對象
    # t=threading.current_thread()
    # print('Task1_name:',t.name)
    print()
    for i in range(count):
        print('Task A ',i+1)
        time.sleep(0.5)
 
def task2(content,count):
    print('Task2_name:', threading.current_thread().name)
    for i in range(count):
        print(f'{content}__Task B ',i+1)
        time.sleep(0.5)
 
 
if __name__ == '__main__':
 
    t1=threading.Thread(target=task1,name='T1',daemon=True,args=(5,))
    t2=threading.Thread(target=task2,name='T2',kwargs={'content':'Yes','count':5})
    # 設置守護主線程的第二種方式
    # t1.setDaemon(True)
    t2.setDaemon(True)
    t1.start()
    t1.join()   # 阻塞函數,t1執行完畢才會向下執行
    t2.start()
    # t2.join()
    print('Main thread over')

二、補充:Python多線程共享變量資源競爭問題

  • 1.資源競爭問題:sum+=1執行時大致會分為三步(取值、加1、寫回),可能剛執行2步cpu就去切換到了另一個線程去執行;

  • 2.解決辦法:1.使用join()方法來設置線程同步(效率不高),2.加鎖(可以保證同一時刻只有一個線程在執行) 。

'''
資源競爭問題:sum+=1執行時大致會分為三步(取值、加1、寫回),可能剛執行2步cpu就去切換到了另一個線程去執行
解決辦法:1.使用join()方法來設置線程同步(效率不高),2.加鎖(可以保證同一時刻只有一個線程在執行)
'''
 
import threading
import time
 
 
sum=0
lock=threading.Lock()
 
def add_num1():
    global sum
    for i in range(1000000):
        # lock.acquire()    # 加鎖
        sum+=1
        # lock.release()    # 解鎖
    print(f'{threading.current_thread().name}的計算結果是{sum}')
 
 
def add_num2():
    global sum
    for i in range(1000000):
        # lock.acquire()
        sum+=1
        # lock.release()
    print(f'{threading.current_thread().name}的計算結果是{sum}')
 
if __name__ == '__main__':
    t1=threading.Thread(target=add_num1)
    t2=threading.Thread(target=add_num2)
    t1.start()
    # 設置阻塞函數,設置線程同步
    t1.join()
    t2.start()
    print(f'Main的sum值是{sum}')

以上就是“Python多線程如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

迁安市| 仙居县| 县级市| 英吉沙县| 临高县| 托克逊县| 平定县| 临夏市| 紫阳县| 田林县| 雷波县| 兰西县| 精河县| 仙居县| 墨脱县| 桦南县| 会同县| 灵武市| 白山市| 麟游县| 玉门市| 新营市| 和平区| 永清县| 临安市| 鞍山市| 射阳县| 化州市| 西华县| 句容市| 汾阳市| 迭部县| 封开县| 普兰店市| 固镇县| 望都县| 晋城| 九龙县| 松阳县| 苗栗县| 常宁市|