本人不喜歡一上來就定義一大堆全域性變數,因此經常通過呼叫類屬性的方法來實現多個文字之間變數共享。這麼做的問題就在於,專案複雜度提公升以後,我就再也找不見某些變數了,俗稱埋藏了無數隻bug。
痛定思痛後,決定在類的內部,設計兩個變數,乙個用來給外部函式呼叫(self.send),乙個用來接收外部函式給的資料(self.send),其實都是外部函式呼叫啦,畢竟類的內部只要self就可以引用了。
主線程(test1.py)中開啟兩個執行緒,這兩個執行緒分別執行不同檔案(test2.py/test3.py)下的兩個類。
**可以直接跑,在pycharm中新建乙個python專案,複製貼上這三段**,然後run test1就可以了。
test1.py
"""
這段**只是開啟兩個執行緒,在專案設計過程中,主線程還可以做其他的任務。
"""import threading
import test2
import test3
if __name__ == '__main__':
te = test2.test2()
ts = test3.test3()
threading.thread(target=te.main_func).start()
threading.thread(target=ts.func,args=(te,)).start()
test2.py
"""這個段**就單純定義乙個類,以及成員函式"""
class test2():
def __init__(self):
self.send =0
self.reci = 0
def send_func(self):
#每呼叫一次就+1
self.send += 1
return self.send
def reci_func(self,data):
#接收另乙個執行緒返回的值
self.reci = data
print("jj="+str(self.reci))
def main_func(self):
# 不斷判斷self.send的值
while 1:
if self.send == 10:
self.send = 0 # 歸零操作
test3.py
"""
在本文的情景下,這段**才是核心執行緒,在主線程中呼叫本段函式的func()
來實現變數值的變化
"""import time
class test3():
def __init__(self):
self.send =0
self.reci = 0
def func(self,t2):
"""t2是傳入的test2例項化的物件,在這個函式裡面,通過呼叫
test2自身的函式來修改test2的成員變數
"""while 1:
time.sleep(1)
self.reci = t2.send_func() *2
t2.reci_func(self.reci)
self.out_func() #test3的輸入函式
def out_func(self):
if self.reci >=10:
print("test3.reci = " + str(self.reci))
多執行緒間共享資料,簡單Demo
多執行緒間共享資料的問題 設計四個執行緒,其中兩個執行緒每次對data增加1,另外兩個執行緒每次對data減少1。從問題來看,很明顯涉及到了執行緒間通資料的共享,四個執行緒共享乙個data,共同操作乙個data。我們先把上面這個問題放在一邊,慢慢分析多個執行緒之間共享資料的一些情況,從最簡單開始,分...
python多執行緒事件 執行緒間的通訊
事件,就是多執行緒之間的通訊 import threading,time class boss threading.thread def run self print boss說 從現在開始我們就要996啦,歡呼吧 事件設定 print event.isset event.set event被set...
Python多執行緒的簡單使用
這主要介紹一下treading模組 最簡單的方法 tred threading.thread target start tred.start 開始執行緒 tred.join 等待執行緒介紹注意一定要寫target,要不然啟動的就不是執行緒。那麼如何自動讓執行緒終止呢?這裡我們可以自己寫乙個方法來繼承...