多进程是操作系统的资源分配的基本单位。
举例:单核CPU可运行一个进程,如果运行多个进程的话,会按顺序运行。并发
双核CPU,可运行两个进程,进程会同时运行。并行属于真正意义上的多线程一起执行
多进程需要需要导入一个包
import multiprocessing
获取子进程的PID
import os
os.getpid
获取父进程的PID
import os
os.getppid
获取当前进程的进程对象和进程名
mp = multiprocessing.current_process()
print(mp)t = multiprocessing.Process(target = test, name = ‘test’)
t.start()
多进程传参操作
#使用args以元组的形式传参
def test(a):
for i in range(a):
print('A – ’ , i )if name = ‘main’:
t = multiprocessing.Process(target = test,args = (5,))
t.start()
#使用kwargs以字典的形式传参
def test(a):
for i in range(a):
print('A – ’ , i )if name = ‘main’:
t = multiprocessing.Process(target = test,kwargs = {‘a’ : 5})
t.start()
多进程注意事项
1.多进程不共享全局变量
list = []
def test():
for i in range(5):
list.append(i)
print(list)def tast():
print(list)if name = ‘main’:
t1 = multiprocessing.Process(target = test)
t2 = multiprocessing.Process(target = test)
t1.start()
t2.start()
2.守护进程(在主进程借宿之前结束子进程)
#方法一手动销毁
def t1():
for i in range(5):
print(i )if name = ‘main’:
t1 = mulitiprocessing.Process(target = t1, name = ‘t1’)t.start() t.terminate()
#方法二守护进程
def t1():
for i in range(5):
print(i )if name = ‘main’:
t1 = mulitiprocessing.Process(target = t1, name = ‘t1’)t.daemon = True t.start()
进程执行代码
#导入包
import mulitiprocessing
import time
import os
#设置进程函数
def t1(a):
#获取当前进程对象
mp = mulitiprocess.current_process()
print(mp)
#获取子进程的PID和父进程的PID
print(‘子进程的PID是{},父进程的PID是{}’.format(os.getpid(),os.getppide())
for i in range(a):
print(‘A – ‘,i)
def t2(a,b):
#获取当前进程对象
mp = mulitiprocess.current_process()
print(mp)
#获取子进程的PID和父进程的PID
print(‘子进程的PID是{},父进程的PID是{}’.format(os.getpid(),os.getppide())
for i in range(b):
print(a,’–’,i)
if name = ‘main’:
mp = mulitiprocess()
print(mp)
print(mp.name)
t1 = mulitiprocess.Process(target = t1,name = ‘t1’ , args = (5,))
t1 = mulitiprocess.Process(target = t1,name = ‘t1’ , kwargs = {‘a’:5})
t2 = mulitiprocess.Process(target = t2,name = ‘t2’ ,args = (‘B’,5))
t2 = mulitiprocess.Process(target = t2,name = ‘t2’ ,kwargs ={‘a’:B,‘b’:5})
#守护进程
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()
#手动销毁进程
t1.terminate()
t2.terminate()