[英]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.