# 關於多程序的一些理解
#利用multiprocessing模組裡面的process類(這裡無論是python2還是3都是如此)
from multiprocessing import process
import time,os
def run_process(name):
print(os.getpid(),name)
if __name__ == '__main__':
print('start',os.getpid())
for i in range(5):
print(os.getpid())
p = process(target = run_process,args = (i,))
print('------------------')
p.start()
#time.sleep(1)
print('...............')
p.join()
print('end')
上面這段**執行結果:
start 1188
1188
------------------
...............
1188
------------------
...............
1188
------------------
...............
1188
------------------
...............
1188
------------------
...............
7788 1
7664 3
2916 0
4536 2
2532 4
end
這個結果很容易對人造成誤解,讓人不明白**的執行順序,
簡要分析一下**的執行過程:
1、首先執行
print('start',os.getpid())
這裡可以看出來主程序就是1188
2、進入for迴圈,首先執行
print(os.getpid())
然後建立第乙個子程序,然後執行
print('------------------')
然後執行p.start()
第乙個程序開始跑起來
然後執行
print('...............')
到這裡,第一次迴圈結束
(這裡有人就奇怪了,為什麼從結果上看是for迴圈裡面輸出語句列印完了子程序的輸出語句才列印呢?
這裡我認為是子程序去呼叫函式run_process的時間比主程序跑for迴圈的時間要長很多的原因,
為了驗證這個猜想,可以將for迴圈語句調成迴圈20次及以上,觀察列印結果就會明白,這時候就會發現其實主程序跑的過程中子程序也在跑了。這也就說明上面的流程是沒有問題的。
並且你會發現**中注釋了一句time.sleep(1),如果你去掉注釋,加入這條語句,讓主程序休息一秒鐘,這時候你會發現子程序的列印結果就會出現在print('...............')語句之前了。)
當然最後輸出end的原因是因為p.join()語句的存在,它使得等所有子程序都執行完畢之後再接著執行主程序
不信的話你試試去掉這條語句,看看end會出現在哪個地方。
python多程序的坑 Python多程序相關的坑
python的multiprocessing模組實現了多程序功能,但官方文件上只有一些比較簡單的用法,主要是使用函式作為process的target,而如何在class中使用多程序並沒有多講解。google出兩篇比較詳細的文章,建議從它們入門 下面記錄一下自己這週在python多程序上碰到的坑 建立...
Python2 3直譯器inpurt 函式的區別
輸入函式 在python2中有兩種輸入函式,1 input 函式會自動識別輸入的引數的資料型別,並進行轉化,如下圖用python2.7.x進行演示 2 raw input 函式 不識別輸入的引數的資料型別,預設所有都是str型別,和python3中的input 一樣 在python2中有只有一種輸入...
Python的多程序
什麼是程序 程序是乙個動態過程的描述,占有計算機的資源,有一定的生命週期。同乙個程式的不同執行過程是不同的程序,占用資源和生命週期都不一樣。分清程式與程序的區別 程序的特徵 多程序的優缺點 要實現python的多程序,有兩種方法 pid os.fork 重點 先來看看 import os pid o...