一.join
1.让主进程在原地等待,但不影响其他子进程的运行
2.等待子进程执行完毕后,回收子进程的PID,然后执行下一行代码.(回收是将子进程占用操作系统的PID回收,但是不影响子进程这个对象下的属性pid所对应的值)
补充:通过子进程.pid这个属性可以查看子进程的PID
from multiprocessing import Process
import time
def task(name, n):
print('%s is running' % name)
time.sleep(n)
print('%s is done' % name)
if __name__ == '__main__':
p1 = Process(target=task, args=('子进程1', 0.1))
p2 = Process(target=task, args=('子进程2', 0.2))
p3 = Process(target=task, args=('子进程3', 0.1))
p1.start()
p2.start()
p3.start()
p1.join()
# 1.让父进程在原地等待,但不影响其他子进程的运行
# 2.等到子进程运行完毕后,并且回收子进程(僵尸进程)占用的PID资源,再执行下面的代码
p2.join()
# 其实这三个子进程的join是同时执行的,谁在前谁在后没关系
p3.join()
#回收的是三个子进程占用操作系统的PID资源,不影响子进程对象下的pid属性的值
print(p1.pid)
print(p2.pid)
print(p3.pid)
print('主')
二.内存中互相隔离
from multiprocessing import Process,current_process
import os
n = 100
def task():
global n
n = 0
print(os.getpid(),n) #拿到子进程占用操作系统的pid
if __name__ == '__main__':
p = Process(target=task)
p.start()
p.join()
print(os.getpid(),n) #拿到主进程占用操作系统的pid
#os.getpid()拿到当前进程占用操作系统的pid值
三.PID
pid是进程的身份证号
补充:
taskkill /F /PID ID号 /F==>强制结束进程
from multiprocessing import Process,current_process
import os,time
def task():
print('自己的id:%s 父进程的id:%s'%(os.getpid(),os.getppid()))
print('自己的id:%s '%current_process().pid)
time.sleep(3)
if __name__ == '__main__':
p1 = Process(target=task)
p1.start()
print('主',os.getpid(),os.getppid())
#os.getpid是查看当前进程的pid
#os.getppid是查看当前进程的爹的pid
# 主进程的"爹"是运行主进程的应用程序,在这里是pycharm
四.name,is_alive
name是查看子进程的名字,可以修改
is_alive是查看进程是否是活着的