多进程知识简单总结

多进程间的全局变量不共享

一、代码展示

import multiprocessing as mul_p
import time

egg1 = 1

def write(egg2, q):

    global egg1
    print("write全局变量彩蛋[%s]..." % egg1)
    print("write彩蛋[%s]..." % egg2)
    egg1 -= 1
    print("write全局变量彩蛋[%s]...原来的彩蛋[1]" % egg1)

    # 将修改后的彩蛋1的值放入队列中去
    q.put(egg1)

def read(egg2, q):

    global egg1
    print("read全局变量彩蛋[%s]..." % egg1)
    print("read彩蛋[%s]..." % egg2)

    while True:

        # 从队列中取出 p1 子进程中的 全局变量彩蛋1 的值
        egg1 = q.get()
        print("read接收到的write中的全局变量彩蛋[1]的值:%d" % egg1)
        if q.empty():
            print("接收完毕...")
            break

def main():

    # 假设连个进程都需要打印下面这个彩蛋2
    egg2 = 2

    # ① 创建一个队列,可以不填,队列就可以很大,但有个极限,我们不去考虑它
    #   如果填了数字为 x ,则这个队列可以存储 x 个数据
    q = mul_p.Queue()

    # ② 创建两个进程对象
    p1 = mul_p.Process(target=write, args=(egg2, q,))
    p2 = mul_p.Process(target=read, args=(egg2, q,))

    # ③ 让两个子进程开始工作
    p1.start()
    # 先让主进程 休息1s 让 p1 子进程先执行完,不然两个子进程 争着执行 打印输出会乱套
    time.sleep(1)
    p2.start()

if __name__ == "__main__":
    main()

运行结果:

write全局变量彩蛋[1]...

write彩蛋[2]...

write全局变量彩蛋[0]...原来的彩蛋[1]
read全局变量彩蛋[1]...

read彩蛋[2]...

read接收到的write中的全局变量彩蛋[1]的值:0
接收完毕...

二、总结

  • ① 各个进程间全局变量的值是 不共享
  • ※:这是因为每创建一个进程就会 copy 一份原始代码(全局变量还是初值)给自己使用,所以进程间的代码是一样的,但 变量和数据是独立
  • ② 各个进程间可以通过 Queue 创建的队列来传递变量,列表,字符串值(包括全局变量的值)
  • ③ 每个进程任务里的参数,除了 全局变量(函数局部变量),其余的参数都需要通过外部实参,传入到内部形参。
  • ※:尤其是上例程的 队列 q 要作为 实参传给两个进程,这样才能实现两个进程间的通信。
  • 进程与线程之间的关系与区别:
  • ① 进程 包含 多个线程
  • ② 进程间 不共用 变量与资源;线程间 共用 变量与资源
  • ③ 使用 time.sleep() ,可以停下当前的进程,让其他进程开始工作

Original: https://www.cnblogs.com/fry-hell/p/12818477.html
Author: 油炸地狱
Title: 多进程知识简单总结

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612620/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • How to show or hide views within a layout

    Android programming: mode selection and switching using a single activity, Show or hide vi…

    Linux 2023年6月13日
    0104
  • mac如何安装FinalShell

    1、Mac一键安装脚本: curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh…

    Linux 2023年5月28日
    0121
  • 迭代

    1.迭代的概念: 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次”迭代”,而每一次迭代得到的结果会作为下一次迭代的…

    Linux 2023年6月8日
    0125
  • 用户相关命令

    关机重启命令均需要root权限执行 su username: 切换用户,不带任何参数会进入root;低权限用户切换高权限用户需要输入密码 logout: 只能在shell上使用,不…

    Linux 2023年6月6日
    0156
  • C语言001–hello world编译详解

    1.编写hello.c程序,并编译运行 book@100ask:~/linux/c01$ cat hello.c -n 1 #include <stdio.h> 2 3…

    Linux 2023年6月6日
    0130
  • Redis 用的很溜,了解过它用的什么协议吗?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白…

    Linux 2023年5月28日
    0129
  • Docker安装及配置镜像加速

    Docker 支持 Mac Windows Linux 的三种安装 1、系统要求 官网提示如果要安装 Docker Engine, 需要一个CentOS 7 以及以上的稳定版本。 …

    Linux 2023年5月27日
    0127
  • linux学习之shell脚本

    【实验目的】‍ ‌ 通过本实验练习,使学生了解常用SHELL的编程特点,掌握SHELL 程序设计的基础知识。对SHELL程序流程控制、SHELL程序的运行方式、bash程序的调试方…

    Linux 2023年5月27日
    0150
  • CTF简介

    最近在学习渗透测试,后来发现CTF很有趣,发现对学习有所帮助,于是找了几个网站,下面推荐几个我觉得不错的网站 https://www.ctfhub.com/#/index http…

    Linux 2023年6月7日
    0135
  • mysql二进制安装脚本部署

    mysql二进制安装脚本部署 mysql二进制安装脚本部署 单实例 使用函数的单实例 使用函数的单实例或者多实例 单实例 [root@localhost ~]# mkdir mys…

    Linux 2023年6月6日
    0142
  • 为Windows Service 2019 使用 Docker

    引言最近收到领导通知,甲方需要将原来的服务器迁移到新的服务器。原来的服务器上安装了很多的服务,每次重启之后总是有很多的问题需要人工大量的进行干预。这次迁移的还是Windows服务器…

    Linux 2023年6月14日
    0139
  • SA算法:从MTSP问题出发

    之前我在这篇博文中介绍了解决MTSP问题的相关思路,并附上了GitHub上的相关源码。在这篇文章中,我将详细介绍如何使用SA智能优化算法进行编程 1. SA算法的核心思路: SA(…

    Linux 2023年6月14日
    0134
  • 大天使之剑H5游戏超详细图文架设教程

    引言 想体验传奇游戏霸服的快乐吗?想体验满级VIP的尊贵吗?想体验一刀99999的爽快吗?各种极品装备、翅膀、宠物通通给你,就在大天使之剑! 本文讲解大天使之剑H5游戏的架设教程,…

    Linux 2023年6月7日
    0151
  • 【计算题】考研数据结构计算题型整理

    题型1:递归程序,一般使用公式进行递推 int fact(int n){ if(n 本题是求阶乘的递归代码,即n * (n-1) * …. * 1。每次递归调用 fac…

    Linux 2023年6月13日
    0134
  • Nginx基础入门篇(2)—编译参数介绍

    查看命令 nginx -V nginx version: nginx/1.22.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (…

    Linux 2023年6月6日
    0158
  • WEB安全信息收集

    每次做测试都要去网上找信息太费劲这里放了常用的所有工具和网站,后期有更新在改。 子域名&敏感信息 通过大量的信息收集,对目标进行全方位了解,从薄弱点入手。 利用Google…

    Linux 2023年6月7日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球