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

溫馨提示×

溫馨提示×

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

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

threading.local 代碼筆記

發布時間:2020-06-26 09:49:17 來源:網絡 閱讀:230 作者:windcharger 欄目:編程語言

演示局部變量

import threading
import time

def worker():
    x = 0
    for i in range(100):
        time.sleep(0.0001)
        x += 1

    print(threading.current_thread(), x)

for i in range(3):
    threading.Thread(target=worker).start()

測試使用全局變量

class A:
    def __init__(self):
        self.x = 0

def worker():
    global_data.x = 0
    for i in range(100):
        time.sleep(0.0001)
        global_data.x += 1
    print(threading.current_thread(), global_data.x)

for i in range(3):
    threading.Thread(target=worker).start()
# 測試發現結果不是我們期望的那樣

引入threading.local

將全局變量,變換成線程的局部變量

global_data = threading.local()

def worker():
    global_data.x = 0
    for i in range(100):
        time.sleep(0.0001)
        # x += 1
        global_data.x += 1
    print(threading.current_thread(), global_data.x)

for i in range(3):
    threading.Thread(target=worker).start()

演示threading.local不能跨線程的問題

X = 'abc'
ctx = threading.local()
ctx.x = 123   # 留意下這一句

print(ctx, type(ctx), ctx.x)

def worker():
    print(X)
    print(ctx)
    # ctx.x = '11111'  # 注釋掉這一行,會報錯。去掉注釋在執行一次
    print(ctx.x)   
    print('working')

worker()
print('========')
threading.Thread(target=worker).start()

# 第三行,因為這個變量在定義的時候是在當前線程下,而threading.local是不能跨線程的
# 所以在啟子線程的時候,重新訪問這個變量的時候會拋出異常
向AI問一下細節

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

AI

望城县| 景泰县| 高州市| 阿合奇县| 临泽县| 阳春市| 五寨县| 会泽县| 霍林郭勒市| 抚远县| 榕江县| 黑龙江省| 绥德县| 赤城县| 晋江市| 古田县| 连州市| 上栗县| 上杭县| 神池县| 怀仁县| 绍兴县| 牙克石市| 乌兰察布市| 阳曲县| 左权县| 康定县| 神农架林区| 即墨市| 清原| 南川市| 新兴县| 房产| 泌阳县| 武邑县| 宁陵县| 久治县| 土默特左旗| 榕江县| 琼中| 德令哈市|