multiprocessing多進程
概念
創(chuàng)建多進程基本流程
創(chuàng)建進程對象
啟動進程 回收進程
代碼:
import multiprocessing as mp
from time import sleep
# 進程執(zhí)行函數(shù)
def fun():
print("開始一個進程")
sleep(3)
print("進程結(jié)束")
# 創(chuàng)建進程對象
p = mp.Process(target = fun)
p.start() # 啟動進程
p.join() # 回收進程
運行結(jié)果:
開始一個進程
進程結(jié)束
Process finished with exit code 0
1 、父子進程是并行執(zhí)行的 子進程執(zhí)行函數(shù) 父進程執(zhí)行除子進程外內(nèi)容:
import multiprocessing as mp
from time import sleep
# 進程執(zhí)行函數(shù)
def fun():
print("開始一個進程")
sleep(3)
print("進程結(jié)束")
# 創(chuàng)建進程對象
p = mp.Process(target = fun) # 把fun函數(shù)作為獨立子進程 其它函數(shù)由進程來執(zhí)行
p.start() # 啟動進程
sleep(2)
print("父進程執(zhí)行內(nèi)容")
p.join() # 回收進程
print("===============")
"""
pid = os.fork
if pid == 0
fun()
os._exit(0)
else:
os.wait()
"""
運行結(jié)果:
開始一個進程
父進程執(zhí)行內(nèi)容
進程結(jié)束
===============
2、子進程不能改變父進程中變量的值
代碼:
import multiprocessing as mp
from time import sleep
a = 1
# 進程執(zhí)行函數(shù)
def fun():
print("開始一個進程")
sleep(3)
global a
print("a=", a)
a = 1000
print("a=", a)
print("進程結(jié)束")
# 創(chuàng)建進程對象
p = mp.Process(target = fun) # 把fun函數(shù)作為獨立子進程 其它函數(shù)由進程來執(zhí)行
p.start() # 啟動進程
sleep(2)
print("父進程執(zhí)行內(nèi)容")
p.join() # 回收進程
print("===============")
print("a=", a)
運行結(jié)果:
開始一個進程
父進程執(zhí)行內(nèi)容
a= 1
a= 1000
進程結(jié)束
a= 1
創(chuàng)建多個進程
代碼:
"""
創(chuàng)建多個進程
"""
from multiprocessing import Process
import os
from time import sleep
def fun1():
sleep(2)
print(os.getppid(), '--', os.getpid(), "吃飯")
def fun2():
sleep(3)
print(os.getppid(), '--', os.getpid(), "睡覺")
def fun3():
sleep(4)
print(os.getppid(), '--', os.getpid(), "學習")
jobs =[]
for th in [fun1, fun2, fun3]:
p = Process(target = th)
jobs.append(p)
p.start()
for i in jobs:
i.join()
運行結(jié)果:
46013 – 46022 吃飯
46013 – 46023 睡覺
46013 – 46024 學習
含有參數(shù)的進程函數(shù)
代碼:
from multiprocessing import Process
from time import sleep
# 含有參數(shù)的進程函數(shù)
def worker(sec, name):
for i in range(3):
sleep(sec)
print("I'm %s"%name)
print("I'm working...")
# p = Process(target = worker, args = (2, "Tom"))
p = Process(target = worker, kwargs = {'name':'tom', 'sec': 2})
p.start()
p.join()
運行結(jié)果:
I'm tom
I'm working…
I'm tom
I'm working…
I'm tom
I'm working…
案例練習
代碼:
from multiprocessing import Process
import os
filename = './dace.jpg'
size = os.path.getsize(filename)
# 復制上半部分
def up():
fr = open(filename, 'rb')
fw = open('bot,jpg', 'wb')
n = size//2
fw.write(fr.read(n))
fw.close()
fr.close()
# 復制下半部分
def down():
fr = open(filename, 'rb')
fw = open('bot,jpg', 'wb')
fr.seek(size//2.0)
fw.write(fr.read())
fw.close()
fr.close()
p = Process(target = up)
q = Process(target = down)
p.start()
q.start()
p.join()
q.join()
到此這篇關于總結(jié)python多進程multiprocessing的相關知識的文章就介紹到這了,更多相關python multiprocessing多進程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 分析詳解python多線程與多進程區(qū)別
- 手把手帶你了解python多進程,多線程
- Python多進程共享numpy 數(shù)組的方法
- Python多線程與多進程相關知識總結(jié)
- python實現(xiàn)多進程并發(fā)控制Semaphore與互斥鎖LOCK
- python 多進程和多線程使用詳解
- python 實現(xiàn)多進程日志輪轉(zhuǎn)ConcurrentLogHandler
- Python多進程與多線程的使用場景詳解
- python多進程執(zhí)行方法apply_async使用說明
- Python 多進程原理及實現(xiàn)
- python多線程和多進程關系詳解
- Python多進程的使用詳情