一、进程
进程是计算机资源分配和调度的基本单位,线程是计算机能够进行运算调度的最小单位。
二、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的方法
标签:__,Process,python,print,test,进程,os From: https://www.cnblogs.com/jimuerga/p/16861491.html