python 歸納 (八)_多進程_基本使用

來源:互聯網
上載者:User

標籤:lag   多線程   空間   port   基本   get   改變   共用   ror   

# -*- coding: UTF-8 -*-"""測試進程使用 multiprocessing.Process使用:    1. 準備一個函數<fun>,子進程要執行的代碼放這裡面         def run_proc(name,l_list)    2. 以函數名、tuple(函數參數1,函數參數2...),建立Process 對象         p = multiprocessing.Process(target=run_proc, args=(str(i),l) )    3. 啟動子進程,這時主進程不會阻塞         p.start()    4. 想讓主進程阻塞,等待子進程完成,接上執行         p.join()總結:   1.python 多進程類似java的多線程   2.case 1 說明 執行子進程時 import <module> 會在各個子進程中重新執行             也就是,無法通過 模組.變數 實現進程間資料共用   3.case2,case 3 執行子進程時,調用程式所在空間的變數,能在子進程函數中     執行訪問,但是修改值無法傳遞到外面             也就是,無法通過 調用子進程所在檔案的變數實現進程間資料共用   4.case4 不能這樣使用變數   5.case5 從進程調用參數,傳入可改變對象list,也無法實現進程間資料共用a.進程間資料共用要靠其他方式疑問:進程對象.join() 實現主進程等待子進程結束如何? 子進程2 等待 子進程1 結束"""import os,timefrom multiprocessing import  Processimport psutilimport test_m # 測試模組 裡面只有變數 m=1c = "c"def run_proc(name,l_list):    print "Child process %s (%s) is running ..." % (name,os.getpid(),)    print "sub process %s" % psutil.Process(os.getpid()).name()    print "list:",l_list    l_list[0] = "a" + name    # case  1    print test_m.m    time.sleep(5)    print "%s end" % os.getpid()    test_m.m = 2    # case  2    # global c 加上報錯    print c    # case 3    global d  # 不加報錯    print d    d = ‘dd‘    # case 4    print e  # pycharm編輯器裡不提示紅色,運行時報錯d = "d"if __name__ == ‘__main__‘:    print  ‘main process %s.‘  % os.getpid()    print "main process %s" % psutil.Process(os.getpid()).name()    e = "e"    test_m.m = 3    l = ["l1","l2"]    for i in  range(2):        p = Process(target=run_proc, args=(str(i),l) )        print ‘process will start,%s‘ % os.getpid()        p.start()        print ‘flag1 %d‘ % i        p.join() # 等待進程完成        print ‘flag2 %d‘ % i        # case 5        print ‘list in main:‘,l    print "main end %s."  % os.getpid()    # case 1    print test_m.m"""Out:main process 7008.main process python.exeprocess will start,7008flag1 0Child process 0 (1272) is running ...sub process python.exelist: [‘l1‘, ‘l2‘]11272 endcdProcess Process-1:.....省略NameError: global name ‘e‘ is not definedflag2 0list in main: [‘l1‘, ‘l2‘]process will start,7008flag1 1Child process 1 (3216) is running ...sub process python.exelist: [‘l1‘, ‘l2‘]1Process Process-2:.....省略NameError: global name ‘e‘ is not defined3216 endcdflag2 1list in main: [‘l1‘, ‘l2‘]main end 7008.3"""

  

python 歸納 (八)_多進程_基本使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.