小白学python-----------------进程相关的属性及方法

一.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是查看进程是否是活着的

猜你喜欢

转载自blog.csdn.net/qq_42721964/article/details/82416621
今日推荐