1. 程式人生 > >【代碼學習】PYTHON 線程

【代碼學習】PYTHON 線程

結果 延時 odin num 16px time 調用 art 使用

一、使用threading模塊多線程執行

  1. 可以明顯看出使用了多線程並發的操作,花費時間要短很多
  2. 創建好的線程,需要調用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()

以上代碼運行結果:

Im Thread-1 @0
Im Thread-1 @1
Im Thread-1 @2

三、線程的執行順序

  1. 每個線程一定會有一個名字,盡管上面的例子中沒有指定線程對象的name,但是python會自動為線程指定一個名字。
  2. 當線程的run()方法結束時該線程完成。
  3. 無法控制線程調度程序,但可以通過別的方式來影響線程調度的方式。
#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()

以上代碼運行結果:

    Im Thread-1 @ 0
    Im Thread-2 @ 0
    Im Thread-5 @ 0
    Im Thread-3 @ 0
    Im Thread-4 @ 0
    Im Thread-3 @ 1
    Im Thread-4 @ 1
    Im Thread-5 @ 1
    Im Thread-1 @ 1
    Im Thread-2 @ 1
    Im Thread-4 @ 2
    Im Thread-5 @ 2
    Im Thread-2 @ 2
    Im Thread-1 @ 2
    Im 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 線程