进程

进程:

进程就是一个正在执行的过程/程序

多进程:

一个程序执行多次就是多进程

import os
import time


print('爹是:',os.getppid())#这个爹pycharm
print('儿是:',os.getpid())

time.sleep(30)

上面一个程序重复执行了三次 得到的三次不一样的pid值

 创建子进程的两种方式:

from multiprocessing import Process
import time
#第一种
def fack(name):
    print('%s 开始'%name)
    time.sleep(3)
    print('%s 结束'%name)

if __name__ == '__main__':
    # p=Process(target=fack,kwargs={'name':'yxlm'})
    p=Process(target=fack,args=('yxlm',))
    p.start()
    print('主====》')

#第二种
class Yuang(Process):
    def __init__(self,name):
        super().__init__()
        self.name=name

    def run(self):
        print('%s 开始' % self.name)
        time.sleep(3)
        print('%s 结束' % self.name)

if __name__ == '__main__':
    p=Yuang('yyyy')
    p.start()
    print('主====》')

进程的内存空间是相互隔离的:

from multiprocessing import Process
import time

x=1000

def fuck():
    global x
    print(x)
    time.sleep(3)
    x=0
    print(x)
print(x)#父进程运行一次,子进程复制也运行了一次
if __name__ == '__main__':
    print(x)
    p=Process(target=fuck)
    p.start()
    time.sleep(5)#等子进程,运行结束值不变,就说明 相互隔离
    print('主===>',x)

父进程 等待子进程结束:

from multiprocessing import Process
import time


def fuck(name):
    print('%s 开始'%name)
    time.sleep(3)
    print('%s 结束'%name)


if __name__ == '__main__':
    p=Process(target=fuck,args=('ymub',))#元组的形式
    p.start()
    p.join()#等待子进程结束
    print('主====》')

进程对象的其他属性:

from multiprocessing import Process
import time

x=1000

def fuck():
    global x
    time.sleep(3)
    x=0
    print(x)


if __name__ == '__main__':
    p=Process(target=fuck,name='张相玉最帅')
    p.start()
    print(p.pid)#pid号
    print(p.name)#名字
    p.terminate()#请求杀死子进程
    p.join()#等待,和处理子进程的数据
    print(p.is_alive())#打印是否存活
    print('主===>')

 僵尸进程和孤儿进程

僵尸进程就是子进程死了  儿子的数据留了下来,让父进程随时来调,如果父进程进入死循环或者父进程还没来得及清理儿子的尸体,就会占用过多的pid号导致 无用的占用 有危害

孤儿进程就是父进程死了 儿子过段时间会有人来带走 所以没有危害

原文地址:https://www.cnblogs.com/yftzw/p/8931348.html