multiprocessing模块
multiprocessing模块是Python操作进程的库
示例:
import os
from multiprocessing import Process
def func(arg):
print("子进程参数:", arg)
print("当前子进程pid:", os.getpid())
if __name__ == '__main__':
print("主进程pid:", os.getpid())
p = Process(target=func, args=('hello', ))
p.start()
Process()
Process()方法是创建进程的方法,返回一个进程对象
target参数值是一个函数名,表示进程要执行的方法
args参数是一个元组,表示传给要执行的函数里的参数
start()
start()是启动进程的方法
其他方法
join()方法用来产生阻塞,等待进程结束之后,代码才会往下执行
def func():
print('子进程执行中......')
time.sleep(5)
if __name__ == '__main__':
print('------主进程开始------')
p = Process(target=func)
print("启动子进程")
p.start()
p.join()
print('子进程执行完毕')
print('------主进程结束------')
------主进程开始------
启动子进程
子进程执行中......
子进程执行完毕
------主进程结束------
is_alive()方法判断进程是否存活
import time
from multiprocessing import Process
def func():
print('子进程执行中......')
time.sleep(5)
if __name__ == '__main__':
print('------主进程开始------')
p = Process(target=func)
print("启动子进程")
p.start()
print('子进程执行完毕')
print('------主进程结束------')
print('子进程还在码:', p.is_alive())
------主进程开始------
启动子进程
子进程执行完毕
------主进程结束------
子进程还在码: True
子进程执行中......
terminate()方法可以强制结束进程
import time
from multiprocessing import Process
def func():
print('子进程执行中......')
time.sleep(5)
print('子进程执行完毕')
if __name__ == '__main__':
print('------主进程开始------')
p = Process(target=func)
print("启动子进程")
p.start()
time.sleep(1)
p.terminate()
print('------主进程结束------')
time.sleep(0.01)
print('子进程还在码:', p.is_alive())
------主进程开始------
启动子进程
子进程执行中......
------主进程结束------
子进程还在码: False
daemon是一个变量,当设置成True时,子进程会随着主进程的代码结束而结束
import time
from multiprocessing import Process
def func():
print('子进程执行中......')
time.sleep(5)
print('子进程执行完毕')
if __name__ == '__main__':
print('------主进程开始------')
p = Process(target=func)
p.daemon = True
print("启动子进程")
p.start()
print('------主进程结束,子进程也不再执行------')
------主进程开始------
启动子进程
------主进程结束,子进程也不再执行------
使用面向对象的方式开启进程
from multiprocessing import Process
class MyProcess(Process):
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
super().__init__()
def run(self):
print(self.arg1)
print(self.arg2)
if __name__ == '__main__':
mp = MyProcess(arg1='hello', arg2='saiya06')
mp.start()
hello
saiya06
进程之间的通信Queue
from multiprocessing import Process, Queue
def func(exp, q):
ret = eval(exp)
q.put(ret) # 将计算结果推送到队列中
if __name__ == '__main__':
q = Queue() # 定义一个process队列
Process(target=func, args=('1+2+3', q)).start() # 开启子进程执行函数func
res = q.get() # 获取子进程的计算结果
print('子进程计算结果:', res)
子进程计算结果: 6
浙公网安备 33010602011771号