多进程_进程理解

python中多进程模块的Process理解 什么是多进程 编程语言中,代码是一行一行执行的,执行完一行再执行下一行;也就是说不做特别处理的程序中,代码只能一步一步的被执行,无法同时执行;像python的交互环境中,代码是典型的一行一行执行的; 无法同时执行两行代码的话,也就无法同时做两件事情,只能有先后顺序的一件一件的做; 但是当我们想在一个程序中,同时做多件事情时,比如做一个视屏播放软件,播放视频的时候得一遍播放画面一边播放音乐,就需要用... 阅读详情

思路渐进目录

  • 1、创建子进程
  • 2、测试Process对象的相关方法
  • 3、多进程执行顺序是不确定的
  • 4、进程之间不共享全局数据
  • 5、使用Queue完成进程之间的通信
  • 6、使用多进程完成文件的拷贝

实现过程代码

1、创建子进程

import time
import multiprocessing
import os


def proc_func(number,age):
   print(age)
   print("这是子进程%d PID:%d 父进程的PID:%d" % (number,os.getpid(),os.getppid()))
   for i in range(3):
       print("这是子进程")
       time.sleep(1)


if __name__ == '__main__':
   # 创建一个子进程 
   # 创建一个进程的执行计划 target指定子进程执行的函数代码 args指定函数代码所需的参数
   pro = multiprocessing.Process(target=proc_func, args=(100,), kwargs={'age':18})

   # PID process identify
   # os.getpid() 获取当前进程的PID
   # os.getppid() parent process identify 获取当前进程的父进程的PID
   # 启动子进程的创建和执行
   pro.start()

   # 用来判断子进程是否存活  存活返回True 退出了返回False
   print(pro.is_alive())

   # 用来阻塞等待子进程结束 然后才会继续往下执行 如果有参数 则表示阻塞等待的超时时间
   pro.join(1)
   print("join1 ")
   print(pro.is_alive())
   pro.join()
   print(pro.is_alive())
   # while True:
   #     print("这是主进程 PID:%d" % os.getpid())
   #     time.sleep(1)
   #     """如果创建子进程 怎么获取当前进程PID 当前进程的父进程的PID(PPID)"""

2、测试Process对象的相关方法

import time
import multiprocessing
import os


def proc_func(number,age):
    print(age)
    print("这是子进程%d PID:%d 父进程的PID:%d" % (number,os.getpid(),os.getppid()))
    for i in range(3):
        print("这是子进程")
        time.sleep(1)


if __name__ == '__main__':
    # 创建一个子进程 
    # 创建一个进程的执行计划 target指定子进程执行的函数代码 args指定函数代码所需的参数
    pro = multiprocessing.Process(target=proc_func, args=(100,), name='SSS',kwargs={'age':18})

    # PID process identify
    # os.getpid() 获取当前进程的PID
    # os.getppid() parent process identify 获取当前进程的父进程的PID
    # 启动子进程的创建和执行

    # 如果子进程还没有创建  则获取不到PID
    # print(pro.pid)

    pro.start()

    # 获取进程对象标识的 进程的名称
    print(pro.name)
    # os.getpid()
    print(pro.pid)
    print(pro.is_alive())

    # terminate()作用是告诉操作系统 让子进程退出 -----> 产生了时间差
    # pro.terminate()
    # time.sleep(0.1)
    pro.join()
    print(pro.is_alive())

3、多进程执行顺序是不确定的

import multiprocessing
import time


def worker1(no):
    while True:
        print(no)
        time.sleep(1)


def worker2(no):
    while True:
        print(no)
        time.sleep(1)


if __name__ == '__main__':
    # 多个进程执行顺序不确定
    for i in range(5):
        pro1 = multiprocessing.Process(target=worker1,args=(i,))
        pro1.start()

4、进程之间不共享全局数据

import multiprocessing
import time

g_number = 0

def worker1(no):
    print(g_number)
    global g_number
    g_number += 99
    while True:
        time.sleep(1)
        print("worker1 获取到的%d" % g_number)


def worker2(no):
    while True:
        time.sleep(1)
        print("worker2 获取到的%d" % g_number)


if __name__ == '__main__':
    # 多个进程内部不共享全局数据  ----> 每个进程是独立的数据空间
    # 在主进程创建子进程的时候  会将全局数据给子进程拷贝一份 
    # 在子进程中修改全局数据不影响其他进程的全局数据
    pro1 = multiprocessing.Process(target=worker1,args=(0,))
    pro1.start()

    pro2 = multiprocessing.Process(target=worker2,args=(1,))
    pro2.start()

5、使用Queue完成进程之间的通信

import multiprocessing
import time

"""主进程往队列中放入屏幕上输入的数据  子进程从队列中取出数据并且打印出来"""


def proc_func(queue):
    while True:
        if queue.empty():
            print("队列是空的 我稍后来取一次")
            time.sleep(2)
        else:
            data = queue.get()
            print("从队列中取出数据%s" % data)
            time.sleep(2)

if __name__ == '__main__':
    # 1 创建一个队列 参数表示队列的最大长度
    queue = multiprocessing.Queue(3)

    # 2 创建一个子进程
    pro = multiprocessing.Process(target=proc_func, args=(queue,))
    pro.start()

    # 3 录入数据 放入队列
    while True:
        if queue.full():
            print("队列已满")
            time.sleep(1)
        else:
            data = input("请输入:")
            queue.put(data)

        print("当前队列数据条数是%s" % queue.qsize())
        """如何创建队列 放数据 取数据"""

6、使用多进程完成文件的拷贝

import os
import multiprocessing
import time

def copy_file(src_path, file_name, dest_path, queue):
    """源目录 文件名 目的目录"""
    # demo    01.py  demo-备份

    # 打开一个源文件 读取
    src_file = open(src_path + '/' + file_name, 'rb')

    # 打开一个目标文件 写入 
    dest_file = open(dest_path + '/' + file_name, 'wb')

    file_data = src_file.read()
    dest_file.write(file_data)

    # 关闭文件
    src_file.close()
    dest_file.close()

    # 通过队列告诉主进程 我已经完成这个文件的拷贝
    queue.put(file_name)


if __name__ == '__main__':
    # 1 用户输入需要拷贝的源目录名称
    src_path = input("请输入你需要拷贝的目录名:")

    # 2 根据该目录名称 创建一个目的目录 -备份
    dest_path = src_path + '-备份'
    os.mkdir(dest_path)

    # 创建一个队列  -主进程 和 多个完成文件拷贝的子进程之间 进行通信
    queue = multiprocessing.Queue()

    # 3 获取到源目录下使用的文件信息列表 为每个文件复制任务创建一个进程完成
    file_list = os.listdir(src_path)
    for file in file_list:
        # print(file)
        pro = multiprocessing.Process(target=copy_file, args=(src_path, file, dest_path, queue))
        pro.start()

    # 计数 完成拷贝的文件数量
    count = 0
    while True:
        queue.get()
        count += 1
        print("\r 当前进度是%% %f" % (count / len(file_list) * 100), end='')
        time.sleep(0.4)
        if count == len(file_list):
            print("完成拷贝")
            break
学习整理——多进程和多线程概念理解 进程 一个进程,包括了代码、数据和分配给进程的资源(内存)。在计算机系统里直观地说一个进程就是一个PID,操作系统保护进程空间不受外部进程干扰,即一个进程不能访问到另一个进程的内存。有时候进程间需要进行通信,这时可以使用操作系统提供进程间通信机制。通常情况下,执行一个可执行文件操作系统会为其创建一个进程以供它运行。但如果该执行文件是基于多进程设计的话,操作系统会在最初的进程上创建出多个进程出来, 阅读详情

相关推荐

深入理解浏览器多进程架构

进程之间是不共享资源和地址空间的,所以不会存在太多的安全问题,而由于多个线程共享着相同的地址空间和资源,所以会存在线程之间有可能会恶意修改或者获取非授权数据等复杂的安全问题。

为了WLB努力 2145

多进程最全讲解———你不进来看看嘛?

创建进程的类:Process([group [, target [, name [, args [, kwargs]]]]]), target:表示调用对象 args:表示调用对象的位置参数元组 kwargs:表示调用对象的字典 name:为别名 group:实质上不使用 默认为None 方法:join([timeout])、run()、start()、terminate()。其中,Process以start()启动某个进程。 属性:authkey、daemon(要通过start()

weixin_44022374的博客 297

PHP多进程(三) 理解多进程

理解多进程执行过程以及最后的数据

qq_43515054的博客 581

Python_多进程_subprocess(含标准输入、输出、错误输出)

多进程_subprocess 一、说明 subprocess为新启动的子进程,不是主进程 cmd的命令的返回结果,会存进pip所在的缓存区域里 统计文件有多少行 wc -l a.txt ls -al|wc -l#ls的命令执行的结果通过管道流给了wc命令去使用 #ls的结果存在了缓存区域,后面的命令可以直接在缓存里取到 >>> im...

weixin_30872733的博客 2430

深入理解Python多进程

本文深入介绍了Python多进程编程的基础概念、实现原理、使用方法以及实战案例。通过本文的学习,读者可以全面理解和掌握Python多进程编程的相关知识,并能够在实际项目中应用多进程技术来提高程序的执行效率。需要注意的是,虽然多进程技术能够带来性能上的提升,但也会带来一些额外的问题和复杂性,如进程间通信、进程同步等。因此,在使用多进程技术时,需要根据实际情况进行权衡和选择。

这家伙很懒,什么都没有留下 1029

ESP32系列之LVGL(四):输入设备(外部按键)对接

本文详细介绍了如何在ESP32上使用LVGL库对接外部按键作为输入设备,包括硬件连接、驱动层实现和LVGL输入设备移植。通过具体代码示例和实战案例,帮助开发者快速实现按键控制UI界面,解决常见问题如按键无反应和控件跳转不正常。

weixin_30907935的博客 241

Python(廖)之进程与线程

一, 关于 多任务 概念 (单核CPU)操作系统轮流让各个任务交替执行 (多核CPU)根据CPU数量,各个任务可以做到一对于定程度的并行执行。 (1)对于操作系统来说,一个任务就是一个进程。比如打开两个记事本就启动了两个记事本进程。 (2)对于一个进程来说,可能会执行多种任务,比如word进程可能同时执行打字,拼写检查,打印等任务。 (3)这些属于进程内的任务就是线程。一个进程至少有一个...

HNDX2018的博客 376

电子产品设计中EFT防护的关键技术与实践

本文深入探讨了电子产品设计中EFT(快速瞬变脉冲群)防护的关键技术与实践。文章从EFT干扰的原理入手,系统阐述了通过优化PCB布局与地平面设计、构建电源与信号端口滤波防护电路、精选核心器件以及实施软件容错策略,来构建多层次、系统性的抗干扰防线,助力产品稳定通过严苛的电磁兼容测试。

e4f5g6h的博客 786

多进程(Multiprocessing)

多进程(Multiprocessing) 源自莫烦python多进程教学 一、多进程的定义和优点 多进程相当于多核处理,它能弥补threading的缺点 即它可以把任务平均分配给每一个核,并且让它们同时进行。

qq_52279299的博客 8217

【Unity学习笔记】事件系统EventSystem

1.EventSystem物体 第一次在Unity中创建UI元素时,总会自动生成一个EventSystem物体,它包含三个组件:Transform、EventSystem、Standalone Input Module。如果我们把它删除了,会发现UI上的事件(比如点击、拖拽)将不会被检测到。没错,它就是用来处理UI相关的事件的。 1.1 EventSystem组件 EventSystem基于输入给物体发送事件,它在整个事件系统中扮演的主要角色是: 1.管理被选中的物体 2.管理正在使用的Input Modu

一白梦人的博客 1万+

PnP 单目相机位姿估计(二):solvePnP利用二维码求解相机世界坐标

前言 原理简介 输入参数准备 1 objectPoints特征点世界坐标 2 imagePoints特征点在摄像头下的像素点坐标 3cameraMatrixdistCoeffs内参矩阵和畸变矩阵 相机世界坐标的求解 1求世界坐标中的点在相机坐标系下的坐标 2求相机在世界坐标中的坐标 3效果求解相机在世界坐标系下的坐标点 4求解代码1.前言  很多时候,当我们利用单目相机获取图像时,往往只能获取图像中

cocoaqin的博客 5万+

多进程详细讲解

一、什么是多进程 相信看过我其他博客的同学已经对多线程和多进程有一个简单的了解了,下面我们简单说一下多进程。我们知道在进行较多的I/O操作时候,比如socket server之类的可以用到多线程,那么什么时候用多进程呢?我们在进行大量的密集运算时候就要用到多进程。下面我们讲解一下多进程的相关知识: (1)启动多进程,并在多进程中启动多线程 #启动多进程 import multipro...

weixin_42898819的博客 1万+

网络流量异常信息分析方法研究

本课题针对网络安全中网络流量异常的分析方法进行研究,提出一种基于机器学习和深度学习的异常检测算法。该算法采用卷积神经网络(CNN)和长短时记忆神经网络(LSTM)结合的方式,通过训练得到二分类模型,从而实现对网络流量异常的检测。随着互联网的飞速发展,网络攻击事件日益增多,网络安全问题成为了亟待解决的问题之一。常见的网络攻击手段包括 DDoS 攻击、SQL 注入、XSS 攻击等,这些攻击手段可能导致网络系统发生异常,给网络运维、数据安全带来极大的挑战。

肥晨开发的学习之路 1035

android多进程好处,android 多进程理解

如果一个进程占用内存超过了这个内存限制,就会报OOM的问题,很多涉及到大图片的频繁操作或者需要读取一大段数据在内存中使用时,很容易报OOM的问题。为了彻底地解决应用内存的问题,Android引入了多进程的概念,它允许在同一个应用内,为了分担主进程的压力,将占用内存的某些页面单独开一个进程,比如Flash、视频播放页面,频繁绘制的页面等。android应用实现多进程需要依赖于android:proc...

weixin_36330704的博客 617

华为OD机试真题2025双机位C卷 Java&Go 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 392

ESP32-S3模组上跑通esp32-camera(32)

ESP32-S3模组上跑通esp32-camera(32)

phmatthaus的专栏 771

理解NodeJS多进程

一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。对于前端开发同学,一定很清楚js是单线程非阻塞的,这决定了NodeJS能够支持高性能的服务的开发。 JavaScript的单线程非阻塞特性让NodeJS适合IO密集型应用,因为JavaScript在访问磁盘/数据库/RPC等时候不需要阻塞等待结果,而是可以异步监听结果,同时继续向下执行。但js不适合计算密集型应用,

m0_67614517的博客 361

13、多实例任务(multi instance)

多实例任务,是指一个类型的任务需要循环执行多次,包括串行多实例任务和并行多实例任务。

leyoliu的博客 3202

python 多进程理解

一些python多进程理解

weixin_44591652的博客 602

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python多进程的理解,多进程读写公共数据,多进程并行,

1. 多进程读写公共数据,多进程并行 #公共数据 temp = np.zeros((4,12)) # 回调函数,用于多进程读写公共数据的,我的理解:多进程在回调函数这里是串行的,否则同时读写会乱掉 # 回调函数必须只有一个输入参数 def mycallback(index): i,j = index[0],index[1] temp[i,j] = i+j # 多进程处理的耗时的算法...

weixin_41457494的博客 1710

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python之多线程,多进程理解

1. 多线程(Multithreading)线程是进程中的一个执行单元。一个进程可以包含多个线程,它们共享同一个内存空间,共同完成任务。在 Python 中,多线程通常用于 I/O 密集型任务(例如网络请求、文件读写等),因为这些任务往往会因为 I/O 操作而被阻塞。通过多线程,我们可以让程序在等待 I/O 操作时继续处理其他任务,从而提升程序的整体响应速度。

qq_42268998的博客 1632

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深入理解多进程

linux 多进程相关概念整理

OnlyLove_的博客 1738

对多进程、多进程以及协程的理解

一、进程:一个运行的程序(代码)就是一个进程。没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的空间,所以进程间数据不共享,开销大。 二、线程:调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率 三、协程:是一种用户的轻量级线程,协程的调度完全有用户控制。...

qq_35169931的博客 356

进程与多进程的理解与实现

子进程和父进程 1). Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊。普通的函数调用, 调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程( 称为父进程)复制了一份(称为子进程),然后,分别在父进程和子进程内返回。 2). 子进程永远返回0,而父进程返回子进程的ID。这样做的理由是,一个父进程可以fork 出很多子进程,所以,父进程要记下...

GLH_2236504154的博客 471

彻底理解 进程、线程、多进程、多线程

教科书上解释:进程是资源分配的最小单位。线程是CPU调度的最小单位。

田埂、の技术博客 1241
上一篇: 多线程__线程理解
下一篇: 设计模式之简单工厂模式(一)
瓦雪子
博客等级 码龄11年 107粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值