学习版本3.5.2
multiprocessing模块跟threading模块非常相似,只是multiprocessing用的进程而threading用的线程。
Process类,这个类跟threading模块的Thread类非常相似。
Process比Thread多一个pid,在进程没有start的时候pid为None。
Process比Thread多了个terminate(self)方法,发送信号告诉说该进程已经完成了。
实验代码:没用terminate和join方法
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from multiprocessing import Process
import time
class myprocess(Process):
def run(self):
print("begin pid:", self.pid)
time.sleep(5)
print("end pid:", self.pid)
if __name__ == "__main__":
processlist = []
for i in range(5):
t = myprocess()
processlist.append(t)
for t in processlist:
t.start()
#processlist[0].terminate()
#processlist[0].join()
print("main")
运行结果
begin pid: 10684
begin pid: 10685
begin pid: 10686
main
begin pid: 10687
begin pid: 10688
end pid: 10684
end pid: 10685
end pid: 10686
end pid: 10687
end pid: 10688
使用terminate(self)方法
#/usr/bin/python3
# -*- utf-8 -*-
#学习版本3.5.2
from multiprocessing import Process
import time
class myprocess(Process):
def run(self):
print("begin pid:", self.pid)
time.sleep(5)
print("end pid:", self.pid)
if __name__ == "__main__":
processlist = []
for i in range(5):
t = myprocess()
processlist.append(t)
for t in processlist:
t.start()
processlist[0].terminate()
processlist[0].join()
print("main")
运行结果
begin pid: 10692
begin pid: 10693
begin pid: 10694
main
begin pid: 10695
begin pid: 10696
end pid: 10694
end pid: 10693
end pid: 10695
end pid: 10696
在使用了terminate(self)方法之后,该进程就已经退出了,所以使用join()方法是没有效果的。