python 开启进程两种方法 multiprocessing模块 介绍教程
一 multiprocessing模块介绍
python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\\_count\(\)查看),在python中大部分情况需要使用多进程。
Python提供了multiprocessing。 multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似。
multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,>提供了Process、Queue、Pipe、Lock等组件。
需要再次强调的一点是:与线程不同,进程没有任何共享状态,进程修改的数据,改动仅限于该进程内。
三 Process类的使用
创建并开启子进程的方式一
Process 传字典 或者args 传参数也可以
start()开启子进程
from multiprocessing import Process
import time
def task(name):
print("%s is running" % name)
time.sleep(3)
print("%s is done" % name)
if __name__ == "__main__":
# 实例化
# args 为函数传参数
t = Process(target=task, args=("子进程1",))
# 开启子进程
t.start() # 仅仅只是给操作系统发送一个信号 与平常print没有什么区别
print("主")
'''
主
子进程1 is running
子进程1 is done
'''
'''
看得出是先打印主 再开启子进程1的
'''
用关键字参数kwargs传参
from multiprocessing import Process
import time
def task(name):
print("%s is running" % name)
time.sleep(3)
print("%s is done" % name)
if __name__ == "__main__":
# 实例化
# 也可以用kwargs 为函数传参数 以字典方式
t = Process(target=task, kwargs={'name': '子进程1'})
t.start()
'''
子进程1 is running
子进程1 is done
'''
应用程序是开不了子进程的 p.start() 给操作系统发送信号 至于操作系统什么时候开进程,开多长时间应用程序是控制不了。
p.start() 给操作系统发送信号 告诉操作系统给个开个子进程吧 操作系统收到后 申请内存空间 把父进程的地址空间数据 拷贝给子进程
作为子进程的初始状态
父进程不知道操作系统会
默认是先 开启主进程执行,主进程执行完,再开启 子进程执行,再到子进程执行结束。
创建并开启子进程的方式二
自己写一个子类去继承他 不用默认的类<br></br><br></br>
方法一定要写run
from multiprocessing import Process
import time
# 自己写一个子类去继承他 不用默认的类
# Process的类传进去
class MyProcess(Process):
# 重写了init方法 父类就被覆盖掉
def __init__(self, name):
# 重用父类 因为父类还有很多有用功能,继承父类
super().__init__()
self.name = name
# 方法一定要写run
def run(self):
print("%s is running" % self.name)
time.sleep(3)
print("%s is done" % self.name)
if __name__ == "__main__":
# 实例化 直接用自己自定义的类开子进程
# args 为函数传参数
p = MyProcess("子进程1")
# 开启子进程
p.start() # 仅仅只是给操作系统发送一个信号 与平常print没有什么区别
# p.start() 本质是调用run方法
print("主")