python基礎(chǔ)進階:多進程開發(fā),(multiprocessing模塊)

本文的文字及圖片來源于網(wǎng)絡(luò),僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問題請及時聯(lián)系我們以作處理

本文章來自騰訊云 作者:我是李超人

私信小編回復(fù)01可領(lǐng)取學(xué)習(xí)資料以及學(xué)習(xí)視頻

在python中可以通過os.fork()創(chuàng)建子進程,但是這種方式只能在linux,unix,mac下面使用,不能跨平臺,所以一般不推薦使用這種方式。Python提供了一個multiprocessing模塊來創(chuàng)建多進程,這種方式寫起來更簡單,且支持跨平臺,一般推薦使用multiprocessing模塊來創(chuàng)建多線程。

1.使用Process來創(chuàng)建進程

from multiprocessing import Process
import os

def pringLog(msg):
    print(msg)
    print('子進程id: %s' % os.getpid())
    print('父進程id: %s' % os.getppid())

if __name__ == '__main__':
    p = Process(target=pringLog, args=('hello world',))
    p.start()
    print('父進程id: %s' % os.getpid())
    print("我是主進程代碼")

輸出:
父進程id: 34076
我是主進程代碼
hello world
子進程id: 30084
父進程id: 34076  

注意:如果是在windows系統(tǒng)下,創(chuàng)建進程的代碼需要放在name == 'main’下面,否則會報錯。

2.通過繼承Process來創(chuàng)建進程

from multiprocessing import Process
import os
import time

class MyProcess(Process):

    def run(self):
        print('子進程id %s' %os.getpid())
        print('父進程id %s' % os.getppid())
        for x in range(5):
            print('子進程 %s' %x)
            time.sleep(1)

if __name__ == '__main__':
    myprocess = MyProcess()
    myprocess.start()

    myprocess.join()
    print('所有進程執(zhí)行完畢')
輸出:
子進程id 23388
父進程id 29012
子進程 0
子進程 1
子進程 2
子進程 3
子進程 4
所有進程執(zhí)行完畢

3.一個小技能,join函數(shù)
Join可以讓主進程阻塞,直到子進程執(zhí)行完畢才會執(zhí)行主進程后面的代碼,通過添加超時參數(shù),還能控制阻塞時長。

from multiprocessing import Process
import time

def countdown():
    for x in range(5):
        print("count:%s" % x)
        time.sleep(1)

if __name__ == '__main__':
    p = Process(target=countdown)
    p.start()

    print('主進程')
    # 一直阻塞,直到子進程執(zhí)行完畢
    # p.join()
    # 阻塞三秒
    p.join(3)
    print('所有進程執(zhí)行完畢')
輸出:
主進程
count:0
count:1
count:2
所有進程執(zhí)行完畢
count:3
count:4
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容