Python 本地線程

來源:互聯網
上載者:User

標籤:執行函數   pytho   不能   script   start   自己的   就是   bsp   源碼   

1. 本地線程,保證即使是多個線程,自己的值也是互相隔離。2.普通對象示範
import  threadingimport timeclass  A():    passa=A()def func(num):    a.name=num    time.sleep(1)    print(a.name,threading.current_thread().name)

結果

D:\virtualenv\envs\vuedjango\Scripts\python.exe D:/test/flaskTest/flaskpro3/本地線程.py4 線程14 線程04 線程34 線程24 線程4Process finished with exit code 0
因為需要sleep最後a.name所得到的值都是最後一個了,無法保證每個線程所對應的值是自己本該對應的值3.本地線程對象示範
import threadingimport time# 本地線程對象local_values = threading.local()def func(num):    """    # 第一個線程進來,本地線程對象會為他建立一個    # 第二個線程進來,本地線程對象會為他建立一個    {        線程1的唯一標識:{name:1},        線程2的唯一標識:{name:2},    }        #注意這裡是我自己假設的    :param num:     :return:     """    local_values.name = num    # 線程停下來了    time.sleep(2)    # 第二個線程: local_values.name,去local_values中根據自己的唯一標識作為key,擷取value中name對應的值    print(local_values.name, threading.current_thread().name)for i in range(5):    th = threading.Thread(target=func, args=(i,), name=‘線程%s‘%i)    th.start()

結果

1 線程10 線程03 線程32 線程24 線程4

使用本地線程,每次線程進來後(執行函數),都會建立一個當前線程的唯一標識,並把本地線程的值儲存起來,形成一一對應的關係,後面即使線程等待了,也不會全部將值變成最後一個,當然線程執行順序不能確定,但是它對應的值肯定是他執行函數時她的唯一標識所對應的值

參考Flask上下文源碼就知道他就是為每個線程建立唯一標識,這裡參考她的源碼把本地線程的結構設計的和她的一樣

 

Python 本地線程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.