簡體   English   中英

存儲為被覆蓋的 class 參數的 python 線程會發生什么? 為什么?

[英]What happens with python threads stored as class parameters that get overwritten? And why?

我做了以下代碼:

#!/usr/bin/python3

import threading, time

class Threader():
    def __init__(self):
        self.var = 1
    
    def create_threads(self):
        self.mythread=threading.Thread(target=self.do_things, daemon=True)
        self.mythread.start()

    def do_things(self):
        time.sleep(0.5)
        self.var=self.var+1

mobject = Threader()
mobject.create_threads()
mobject.create_threads()
mobject.create_threads()

time.sleep(3)
print(mobject.var)

在屏幕上打印數字 4。 我做了它來測試假設,因為 python 調用 mobject.create_threads() 的時間小於 0.5 秒,所以 mythread 參數將被覆蓋,然后線程執行將在執行 self.var+=1 操作之前停止.

這個假設顯然是錯誤的:所有線程都執行到最后,給 self.var 添加 +1。 為什么? 換句話說:當一個線程被實例化為一個 class 參數並且該參數被其他任何東西覆蓋時,是否存在線程將停止而不到達它的末尾的風險? 如果是或不是,為什么?

create_threads立即運行並返回。 它不是線程 function - 它是完全同步的。 是的,您正在覆蓋mobject.mythread ,但是由於在 function 返回之后您不使用它,所以沒關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM