python之进程

一、进程

  进程是计算机资源分配和调度的基本单位,线程是计算机能够进行运算调度的最小单位。

二、python中的进程模块multiprocessing

# 文件名为 test_Process_1
1
import os 2 from multiprocessing import Process 3 5 def test_process(参数1): 6  print("这是一个测试函数") 7  print("获取进程号%s,父进程%s"% (os.getpid(),os.getppid())) 8 9 if __name__ == "__main__": 10 p = Process(target=test_process,args = (对应函数参数1,)) #test_process 函数名后不带括号,且参数的传入是元组 11 p.start() # 开启进程 异步 非阻塞 12 p.join() #同步 阻塞
    print("这是主进程%s"% os.getpid())

   通过以上的运行,可以看到主进程pid与test_process中获得的父进程是一样的,就是说,if __name__ == "__main__":下的代码执行就是一个主进程,

此主进程从上到下,依次执行,运行到p.start()的时候开始创建子进程(在Windows上创建子进程是导入父进程资源的方式开始子进程,Linux,ISO上创建

的子进程是直接从当前开始子进程的地方开始,并不会重新加载父进程的资源)。运行到p.join()时会等待子进程的结束后进入print("这是主进程%s"% os.getpid()),

注意以上同步与异步的理解。

三、守护进程

  守护进程随着主进程代码运行结束的结束而结束

  如下例:

  

# 文件名为 test_Process_2
import os
from multiprocessing import Process

def test_process(参数1):
    print("这是一个测试函数")
    print("获取进程号%s,父进程%s"% (os.getpid(),os.getppid()))

if __name__ == "__main__":
    p = Process(target=test_process,args = (对应函数参数1,))   #test_process 函数名后不带括号,且参数的传入是元组
    p.daemon = True # 守护进程
    p.start() # 开启进程 异步 非阻塞
    #p.join() #同步 阻塞
    print("这是主进程%s"% os.getpid())

  执行此代码 test_process中的代码并不会执行或者说守护进程的原因,主进程的代码运行太快又因为,守护进程是伴随主进程代码的运行结束而结束。故没能执行子进程函数

但是,主进程是子进程结束后再结束的,如果主进程先结束,留下子进程,子进程就会变成僵尸进程。注意理解,守护进程是随着主进程代码的运行结束而结束,主进程并定在子进程结束后再结束。

p.is_alive(),p.terminate() 都是异步非阻塞。

四、创建进程对象

 

from multiprocessing import Process

class Test_Process(Process):
    
    def __init__(self,x,y):
        self.x = x
        self.y = y
        super().__init__()
     
    def run(self):
        print("开启子进程")
        print(self.x,self.y)

if __name__ == "__main__":
    p = Test_Process(参数1,参数2) #若需要传参数,就需要重写 init魔法方法
    p.start() # 执行run的方法   

 

  

posted @ 2022-11-05 22:42  小草议员  阅读(57)  评论(0)    收藏  举报