亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

怀集县| 通河县| 台南县| 株洲县| 天柱县| 弥勒县| 南昌市| 宜兰市| 青川县| 卢龙县| 云南省| 巴林左旗| 页游| 惠安县| 曲靖市| 双鸭山市| 邵阳县| 南投市| 工布江达县| 伊春市| 浦东新区| 清流县| 无为县| 华安县| 镇江市| 无锡市| 赤城县| 囊谦县| 丹寨县| 兴国县| 阳曲县| 鲁甸县| 平舆县| 调兵山市| 都安| 娄底市| 宝山区| 延长县| 江都市| 石棉县| 万荣县|