【代碼學習】PYTHON 線程
阿新 • • 發佈:2017-08-04
結果 延時 odin num 16px time 調用 art 使用
一、使用threading模塊多線程執行
- 可以明顯看出使用了多線程並發的操作,花費時間要短很多
- 創建好的線程,需要調用
start()
方法來啟動
#coding=utf-8 import threading import time def test(): print("----TEST By SQYY----") time.sleep(1) if __name__ == "__main__": for i in range(5): t = threading.Thread(target=test) t.start()#啟動線程,即讓線程開始執行
以上代碼運行結果
----TEST By SQYY--------TEST By SQYY--------TEST By SQYY---- ----TEST By SQYY--------TEST By SQYY----
二、使用Thread子類完成創建多線程
如果多個線程執行的都是同一個函數,各自之間不會有影響
主線程等待所有子進程結束之後才結束
#coding=utf-8 import threading import time class MyThread(threading.Thread): def run(self)for i in range(3): time.sleep(1) msg = "I‘m" + self.name + ‘@‘ + str(i) #name屬性中保存的是當前線程的名字 print(msg) if __name__ ==‘__main__‘: t = MyThread() t.start()
以上代碼運行結果:
I‘m Thread-1 @0 I‘m Thread-1 @1 I‘m Thread-1 @2
三、線程的執行順序
- 每個線程一定會有一個名字,盡管上面的例子中沒有指定線程對象的name,但是python會自動為線程指定一個名字。
- 當線程的run()方法結束時該線程完成。
- 無法控制線程調度程序,但可以通過別的方式來影響線程調度的方式。
#coding=utf-8 import threading import time class MyThread(threading.Thread): def run(self): for i in range(3): time.sleep(1) msg = "I‘m "+self.name+‘ @ ‘+str(i) print(msg) def test(): for i in range(5): t = MyThread() t.start() if __name__ == ‘__main__‘: test()
以上代碼運行結果:
I‘m Thread-1 @ 0 I‘m Thread-2 @ 0 I‘m Thread-5 @ 0 I‘m Thread-3 @ 0 I‘m Thread-4 @ 0 I‘m Thread-3 @ 1 I‘m Thread-4 @ 1 I‘m Thread-5 @ 1 I‘m Thread-1 @ 1 I‘m Thread-2 @ 1 I‘m Thread-4 @ 2 I‘m Thread-5 @ 2 I‘m Thread-2 @ 2 I‘m Thread-1 @ 2 I‘m Thread-3 @ 2
四、多線程全局變量共享
from threading import Thread import time #線程之間共享全局變量 g_num = 100 def work1(): global g_num for i in range(3): g_num += 1 print("----in work1, g_num is %d---"%g_num) def work2(): global g_num print("----in work2, g_num is %d---"%g_num) print("---線程創建之前g_num is %d---"%g_num) t1 = Thread(target=work1) t1.start() #延時一會,保證t1線程中的事情做完 time.sleep(1) t2 = Thread(target=work2) t2.start()
以上代碼運行結果:
---線程創建之前g_num is 100--- ----in work1, g_num is 103--- ----in work2, g_num is 103---
【代碼學習】PYTHON 線程