標籤: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 歸納 (八)_多進程_基本使用