本文的文字及圖片來源于網(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