python3 執行緒中常用的兩個模組為:
import threading
from time import sleep,ctime
def sing():
for i in range(3):
print("正在唱歌...%d"%i)
sleep(1)
def dance():
for i in range(3):
print("正在跳舞...%d"%i)
sleep(1)
if __name__ == '__main__':
print('---開始---:%s'%ctime())
t1 = threading.thread(target=sing)
t2 = threading.thread(target=dance)
t1.start()
t2.start()
#sleep(5) # 遮蔽此行**,試試看,程式是否會立馬結束?
print('---結束---:%s'%ctime())
"""輸出結果:
---開始---:sat aug 24 08:44:21 2019
正在唱歌...0
正在跳舞...0---結束---:sat aug 24 08:44:21 2019
正在唱歌...1
正在跳舞...1
正在唱歌...2
正在跳舞...2
"""
說明:主線程會等待所有的子執行緒結束後才結束
為了讓每個執行緒的封裝性更完美,所以使用threading模組時,往往會定義乙個新的子類class,只要繼承threading.thread就可以了,然後重寫run方法。
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-5 @ 0
i'm thread-5 @ 1
i'm thread-5 @ 2
"""
from concurrent.futures import threadpoolexecutor
import time
import os
def sayhello(a):
for i in range(10):
time.sleep(1)
print("hello: " + a)
def main():
seed = ["a", "b", "c"]
# 最大執行緒數為3,使用with可以自動關閉執行緒池,簡化操作
with threadpoolexecutor(3) as executor:
for each in seed:
# map可以保證輸出的順序, submit輸出的順序是亂的
executor.submit(sayhello, each)
print("主線程結束")
if __name__ == '__main__':
main()
建立執行緒的幾種方式
thread,runnable,callable runnable和callable的區別是,1 callable規定的方法是call runnable規定的方法是run 2 callable的任務執行後可返回值,而runnable的任務是不能返回值得 3 call方法可以丟擲異常,run方法不可以...
建立執行緒的幾種方式
class a int operator int n void foo int x int main 6 lambda表示式 thread t7 a f,a,8,w 傳遞a的拷貝的成員函式給子執行緒 thread t8 a f,a,8,w 傳遞a的位址的成員函式給子執行緒 futurefu asyn...
建立執行緒的幾種方式
建立執行緒有四種方式 1.繼承thread類 public class mythread00 extends thread public static void main string args 2.實現runnable介面 public class mythread01 implements ru...