python多程序,多執行緒例項
阿新 • • 發佈:2021-08-24
多程序和多執行緒總是傻傻分不清,查閱資料得知主要區別有兩點
- 一個程序可能包含多個執行緒,也就是執行緒概念小於程序
- 多執行緒共享程序資料,共享簡單,但同步複雜,相反,多執行緒資料是分開,但同步簡單
多程序
多程序我一遍會使用multiprocessing包
from multiprocessing import Process def fun1(name): print('測試%s多程序' %name) if __name__ == '__main__': process_list = [] for i in range(5): #開啟5個子程序執行fun1函式 p = Process(target=fun1,args=('Python',)) #例項化程序物件 p.start() process_list.append(p) for i in process_list: p.join() print('結束測試')
join()方法可以在當前位置阻塞主程序,帶執行join()的程序結束後再繼續執行主程序的程式碼邏輯,也就是說,加了join(),主程序會等待在這裡直到多程序執行完畢,再執行。 不加join,主程式會繼續執行,不會等待多程序結束
除了直接寫程序,還能使用程序池
from multiprocessing import Process,Pool def fun1(name): print('Run task %s (%s)...' % (name, os.getpid())) start = time.time() time.sleep(random.random() * 3) end = time.time() print('Task %s runs %0.2f seconds.' % (name, (end - start))) if __name__=='__main__': pool = Pool(5) #建立一個5個程序的程序池 for i in range(10): pool.apply_async(func=fun1, args=(i,)) #apply是同步,apply_async是非同步 pool.close() pool.join() print('結束測試')
多執行緒
多執行緒我一般會用threading
import threading
def fun1(name):
print('測試%s多執行緒' %name)
if __name__ == '__main__':
for i in range(10):
t = threading.Thread(target=fun1, args=(str(i),))
t.start()