一 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("主")

标签: 进程, python, 模块, multiprocessing, Process

相关文章推荐

添加新评论,含*的栏目为必填