1. 程式人生 > 其它 >python多程序,多執行緒例項

python多程序,多執行緒例項

多程序和多執行緒總是傻傻分不清,查閱資料得知主要區別有兩點

  • 一個程序可能包含多個執行緒,也就是執行緒概念小於程序
  • 多執行緒共享程序資料,共享簡單,但同步複雜,相反,多執行緒資料是分開,但同步簡單

多程序

多程序我一遍會使用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()