我是靠谱客的博主 完美老虎,最近开发中收集的这篇文章主要介绍Python多进程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

并发和并行的区别

并发指的是,假如单核的cpu,要同时运行多个任务,这个时候就需要不断的切换任务,只是切换的比较快,没有分辨出来。

并行,是假如是2核的cpu,有两个任务要运行,一个cpu执行一个任务,这个时候两个任务同时运行,就是并行。

可以使用多进程和多线程,完成多任务

一、多进程完成多任务

进程的创建步骤

1、导入进程包

import multiprocessing

2、通过进程类创建进程对象

进程对象 = multiprocessing.Processing(target=任务名)

参数名 说明

target 执行的目标任务名,这里指的是函数名(方法名)

name 进程名,一般不用设置

group 进程组,目前只能使用None

3、启动进程执行任务

进程对象.start()

单进程写法

import time
import multiprocessing

def sing():
    for i in range(3):
        print("唱歌....")
        time.sleep(0.5)


def dance():
    for i in range(3):
        print("跳舞.....")
        time.sleep(0.5)


if __name__ == '__main__':
    sing()
    dance()

多进程写法

import time
import multiprocessing


def sing():
    for i in range(3):
        print("唱歌....")
        time.sleep(0.5)


def dance():
    for i in range(3):
        print("跳舞.....")
        time.sleep(0.5)


if __name__ == '__main__':
    sing_process = multiprocessing.Process(target=sing)
    dance_process = multiprocessing.Process(target=dance)

    sing_process.start()
    dance_process.start()

二、进程执行带有参数的任务

参数名       说明

args           以元组的方式给执行的任务传参

kwargs       以字典的方式给执行任务传参

1、args 参数的使用

sing_process = multiprocessing.Process(target=sing, args=(3,))

sing_process.start()

元组的顺序,要与参数顺序一致

2、kwargs参数的使用

dance_process = multiprocessing.Process(target=dance, kwargs={"num": 3})

dance_process.start()

字典的key 要与参数一致

import time
import multiprocessing


def sing(num):
    for i in range(num):
        print("唱歌....")
        time.sleep(0.5)


def dance(num):
    for i in range(num):
        print("跳舞.....")
        time.sleep(0.5)


if __name__ == '__main__':
    sing_process = multiprocessing.Process(target=sing, args=(3,))
    dance_process = multiprocessing.Process(target=dance, kwargs={"num": 4})

    sing_process.start()
    dance_process.start()

三、获取进程的编号

1、获取当前进程编号

os.getpid()

import os

pid = os.getpid()
print(pid)

2、获取当前父进程编号

os.getppid()

import os

ppid = os.getppid()
print(ppid)

四、多进程的注意点

1、主进程默认会等待所有的子进程执行结束再结束,保证子进程都结束掉

import time
import multiprocessing


def work():
    for i in range(10):
        print("工作中")
        time.sleep(0.2)


if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    work_process.start()

    # 主进程失眠1秒
    time.sleep(1)
    print("主进程执行完成......")



# 工作中
# 工作中
# 工作中
# 主进程执行完成......
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 工作中

2、子进程设置守护主进程,一旦主进程结束,所有的子进程自动销毁

增加一行代码

work_process.daemon = True

import time
import multiprocessing


def work():
    for i in range(10):
        print("工作中")
        time.sleep(0.2)


if __name__ == '__main__':
    work_process = multiprocessing.Process(target=work)
    work_process.daemon = True
    work_process.start()

    # 主进程失眠1秒
    time.sleep(1)
    print("主进程执行完成......")


# 工作中
# 工作中
# 工作中
# 工作中
# 工作中
# 主进程执行完成......

总结:

为了保证子进程能够正常的运行,主进程会等所有的子进程执行完成以后再销毁,设置守护主进程的目的是主进程退出子进程销毁,不让主进程再等待子进程去执行。

设置守护主进程方式:子进程对象.daemon = True

最后

以上就是完美老虎为你收集整理的Python多进程的全部内容,希望文章能够帮你解决Python多进程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部