IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python多进程 -> 正文阅读

[人工智能]Python多进程

一、单进程示例

举例一个吃饭活动,有一碗汤和一碗饭,正常操作是一口饭一口汤(当然你先把汤或者饭一口气吃完,当我无话可说)。单进程只能是先吃完饭,再喝汤;或者是先喝完汤,再吃饭。

看代码

import time
def drink():
    for i in range(3):
        print("喝汤……")
        time.sleep(1)

def eat():
    for i in range(3):
        print("吃饭……")
        time.sleep(1)

if __name__ == '__main__':
    eat()
    drink()

运行结果如下

先喝完了所有汤,再吃完所有饭?,显然这种结果不是我们想要的

二、多进程的实现

进程的创建步骤

1、导入进程包

import multiprocessing

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

进程对象 = multiprocessing。Process(target=*)

此处target的值可以是函数名称?

3、启动进程执行任务

进程对象.start()

看代码示例

import multiprocessing
import time
def drink():
    for i in range(3):
        print("喝汤……")
        time.sleep(1)

def eat():
    for i in range(3):
        print("吃饭……")
        time.sleep(1)

if __name__ == '__main__':
    #target:指定函数名
    drink_process = multiprocessing.Process(target=drink)
    eat_process = multiprocessing.Process(target=eat)

    drink_process.start()
    eat_process.start()

运行结果

?可以看到喝汤和吃饭交叉进行

三、带参多进程

这地方用到的是args和kwargs,其中args是使用元素组的方式给指定任务传参,kwargs是使用字典方式给指定任务传参。

args使用方式

进程对象 = multiprocessing。Process(target=*,args=(*,))

此处注意,若只有一个元素,那个逗号也是不可以省略的。

kwargs使用方式

进程对象 = multiprocessing。Process(target=*,kwargs={"变量名": 变量值})

还是以上面吃饭喝汤为例子写代码

import time
import multiprocessing


def eat(num,name):
    for i in range(num):
        print(name+"吃一口……")
        time.sleep(1)


def drink(num,name):
    for i in range(num):
        print(name+"喝一口……")
        time.sleep(1)


if __name__ == '__main__':
    # target:指定执行的函数名
    # args:使用元组方式给指定任务传参
    # kwargs:使用字典方式给指定任务传参
    eat_process = multiprocessing.Process(target=eat,args=(3,"giao"))
    drink_process = multiprocessing.Process(target=drink,kwargs={"num": 4,"name":"giao"})

    eat_process.start()
    drink_process.start()

执行结果

可以看到参数成功的传入到了所要执行的任务中

四、获取进程的编号

1、获取当前进程的编号

os.getpid()

2、获取当前进程的父进程的编号

os.getppid()

还是以吃饭喝汤为例,看代码

import time
import multiprocessing
import os


def eat(num,name):
    print("吃饭的进程ID:", os.getpid())
    print("吃饭的主进程ID:", os.getppid())
    for i in range(num):
        print(name+"吃一口……")
        time.sleep(1)


def drink(num,name):
    print("喝汤的进程ID:", os.getpid())
    print("喝汤的主进程ID:", os.getppid())
    for i in range(num):
        print(name+"喝一口……")
        time.sleep(1)


if __name__ == '__main__':
    # target:指定执行的函数名
    # args:使用元组方式给指定任务传参
    # kwargs:使用字典方式给指定任务传参
    eat_process = multiprocessing.Process(target=eat,args=(3, "giao"))
    drink_process = multiprocessing.Process(target=drink,kwargs={"num": 4, "name":"giao"})
    print("主进程ID:", os.getpid())

    eat_process.start()
    drink_process.start()

结果如图

可以清楚的看到,正常情况下,吃饭和喝汤的父进程是同一个进程,而吃饭和喝汤有不同的进程编号。

进程注意点

1、主进程会等待所有的子进程执行结束再结束。

看代码示例

import multiprocessing
import time


def eat():
    for i in range(10):
        print("我吃我吃……")
        time.sleep(0.5)


if __name__ == '__main__':
    eat_process = multiprocessing.Process(target=eat)
    eat_process.start()

    time.sleep(1)
    print("我吃饱了……")

运行结果如图

发现主进程显示已经吃饱了,但是子进程还是在吃,程序等到子进程运行完,才结束。?

2、可以设置子进程守护,当主进程结束时,子进程也不再继续执行,直接结束。

只需要再创建进程之后,加入这样一句代码

进程名称.daemon = True

这样子进程就会守护主进程,主进程结束,子进程也会自动销毁。

看代码

import multiprocessing
import time


def eat():
    for i in range(10):
        print("我吃我吃……")
        time.sleep(0.5)


if __name__ == '__main__':
    eat_process = multiprocessing.Process(target=eat)
    # 设置进程守护
    eat_process.daemon = True
    eat_process.start()

    time.sleep(1)
    print("我吃饱了……")

运行结果如图

可以明确看到,主进程结束后,子进程不再继续执行,直接销毁。?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-03 17:04:52  更:2021-10-03 17:05:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:53:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码