關於Python2 3多程序的一些個人理解

2021-08-11 14:39:59 字數 1805 閱讀 7563

# 關於多程序的一些理解

#利用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...