python基礎學習3

來源:互聯網
上載者:User

標籤:%s   基礎   元組   建立   返回   執行順序   ali   code   proc   

多任務:

frok():只能在linux下執行

 

import osimport time#在程式運行時,父進程的ID就已經產生完畢了print(‘當前進程是父進程,id是:%s‘%os.getpid())ret = os.fork()   #建立一個子進程#ret的值在父進程中是子進程的ID,在子進程中則返回0print(‘ret的值是%s‘%ret)print(‘*‘*50)if ret == 0:        #ret值為0,是子進程    print(‘這是一個子進程:%s,他的父進程是:%s‘%(os.getpid(),os.getppid()))    time.sleep(1)#os.getpid()是返回當前進程id,os.getppid()是返回當前進程的父進程idelif ret > 0:          #ret值大於0,是在父進程中    print(‘這是父進程:%s,子進程的值是:%s‘%(os.getpid(),ret))    time.sleep(1)else:    print(‘進程建立失敗‘)    time.sleep(1)

 

如果主進程退出,整個進程就直接退出了,不會因為子進程沒執行完而等待子進程結束後才結束整個進程

子進程中修改的全域變數不會影響到父進程的全域變數,多進程中,資料不共用,如果想共用進程中的資料,需要處理序間通訊

 多次fork()的結果:

 

父進程,子進程執行順序沒有規律,完全看作業系統的調度代碼

 

multiprocessing 在windows上也能用的多進程模組,他提供了一個Process類來代表一個進程對象,這樣就能實現跨平台開發了

fork()建立的子進程,如果主進程退出,就所有進程退出

Process類建立的子進程,主進程退出後還會繼續執行

from multiprocessing import Processimport osimport time#將子進程要執行的代碼放入函數中def run_proc(name):    print(‘子進程運行中,name = %s , pid = %d...‘%(name,os.getpid()))if __name__ == ‘__main__‘:    print(‘父進程%d‘%os.getpid())    #建立一個Process的執行個體對象,一個執行個體對象就是一個子進程    p = Process(target=run_proc,args=(‘test‘,)) #傳入的是元組,如果只有一個值,要在結尾加逗號                    #target後面放的是子進程要啟動並執行函數                    #args放的是target裡函數需要的參數        print(‘子進程開始執行‘)    p.start()   #開始執行子進程    p.join()    #等待子進程結束後才繼續執行後面的函數,通常用於進程同步    print(‘子進程結束執行‘)

執行個體練習:

 

from multiprocessing import Processimport osimport time#將子進程要執行的代碼放入函數中def run_proc(name,age,**kwargs):    for i in range(10):        print(‘子進程運行中,name = %s,age=%d,pid = %d...‘%(name,age,os.getpid()))        print(kwargs)        time.sleep(1)    print(‘子進程結束‘)if __name__ == ‘__main__‘:    p = Process(target=run_proc,args=(‘test‘,18),kwargs={‘tom‘:‘alice‘})    print(‘子進程將要執行‘)    p.start()        time.sleep(1)    p.terminate()    #殺死子進程        p.join()    print(‘父進程結束‘)

 

發現子進程就運行了一秒後就被強行結束了,結束後執行輸出父進程結束,如果沒有調用terminate()的話,會等到子進程迴圈完才結束

執行個體練習2:

from multiprocessing import Processimport osimport timedef work_1(interval):    print(‘work_1父進程(%s),當前進程(%s)‘%(os.getppid(),os.getpid()))        t_start = time.time()  #取當前的時間戳記    time.sleep(interval)    t_end = time.time()    print(‘work_1 執行時間為%.2f秒‘%(t_end-t_start))    print(‘work_1結束‘)def work_2(interval):    print(‘work_2父進程(%s),當前進程(%s)‘%(os.getppid(),os.getpid()))        t_start = time.time()  #取當前的時間戳記    time.sleep(interval)    t_end = time.time()    print(‘work_2 執行時間為%.2f秒‘%(t_end-t_start))    print(‘work_2結束‘)if __name__ == ‘__main__‘:    print(‘當前程式ID(父進程):%s‘%os.getpid())        p1 = Process(target=work_1,args=(2,))    p2 = Process(target=work_2,name=‘dd‘,args=(3,))    #name參數是給進程取個進程名,沒有調用的話程式會預設產生Process-x的程式名    p1.start()    p2.start()    print(‘p1.name=%s‘%p1.name)    print(‘p1.pid=%d‘%p1.pid)    print(‘p2.name=%s‘%p2.name)    print(‘p2.pid=%d‘%p2.pid)    print(‘主進程結束‘)

 

 

 

python基礎學習3

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.