进程,首先理解进程的概念,假如我们的电脑内存大小是一定的,要开启多个软件,内存的占用就会越来越大,计算机有自己的处理方式。例如时间片轮转,优先级调度等。如果内存当前被占用大部分的空间,开启的软件过多,其他软件也要得到计算机的内存空间,这时候内存就会轮番调度。这个时间间隔是非常短暂的给人的感觉就是多个软件在一起执行。
Python中创建多进程。Python的OS模块封装了常见的系统调用,多进程的调用就是fork,可以使用python创建多进程。
一、fork创建
import os
ret = os.fork() # 返回值等于0时,子进程
print(ret)
if ret>0:
print("---父进程--%d-"%os.getpid())
else:
print("---子进程---%d-%d-"%(os.getpid(),os.getppid()))
注意,在win系统中,没有fork这个系统调用,那么如何在win系统中开启多进程呢?
二、Multiprocessing 模块 Process类
第二种创建进程的方式,是通过Multiprocessing模块中的Process类,创建Process对象,通过对象参数target=“需要执行的子进程”
from multiprocessing import Process
import time
def test():
while True:
print("---test---")
time.sleep(1)
p = Process(target=test) # target参数需要执行的子进程
p.start() #让这个进程开始执行test函数里的代码
while True:
print("---main---")
time.sleep(1)
注:与fork的不同点;fork不是跨平台的,在win系统中不能使用,而在win系统中使用Process对象来调用子进程需要执行的方法。通过start开启子进程;在fork中,主进程不会等待子进程的结束,而结束主进程,在Process开启的子进程中,会等待所有的子进程结束后,才会结束主进程。
三、通过继承Process类,创建子进程
在.start()方法时,会自动调用run方法。
from multiprocessing import Process
import time
class MyNewProcess(Process):
def run(self): # 重写run方法
while True:
print("---1----")
time.sleep(1)
p = MyNewProcess()
p.start() # 开启进程
while True:
print("---main----")
time.sleep(1)
继承父类的这种方式,底层的实现其实就是Process创建的方式。