Python Windows系统多进程创建模式及简单应用

Windows上的Python多进程 Python Multiprocessing on Windows 因为众所周知的GIL(全局解释器锁),在Python上实现真正的并发只能通过python multiprocessing。但是在Windows上,运用python multiprocessing并没有在Linux那么简单。 if __name__ == "__main__": 也许大家有些在Linux跑的很好的多进程的程序,在Windows上一跑就会经常遇到这些错误的信息 “An attempt has been made to start 阅读详情


Python Windows系统多进程创建模式及简单应用

`

Python 多进程不受GIL锁的限制,多进程之间可以并行执行。
多进程应用需要调用python标准模块Multiprocessing
通过调用os.getpdi()方法可以查看当前进程的编号

下面示例可以展示多进程的简单创建及传入参数


import multiprocessing
import time
import os


# 子进程的代码
def run_proc(name, sec):
    for _index in range(sec):
        print('{} Process id: {} running seconds: {}'.format(name, os.getpid(), _index))
        time.sleep(1)


if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')
    # windows 系统不支持fork模式,如果使用会报错
    # multiprocessing.set_start_method('fork')
    print('Parent process %s.' % os.getpid())  # 打印当前进程 pid

    # 实例化一个进程,注意传入的参数为一个元组,当只有一个参数时,写成(arg,)
    p1 = multiprocessing.Process(target=run_proc, args=('Child 1', 5))
    p2 = multiprocessing.Process(target=run_proc, args=('Child 2', 20), daemon=True)

    print('Child process will start.')
    p1.start()
    p2.start()
    run_proc("Parent", 5)
    p1.join()  # join()方法可以等待子进程结束后再继续往下运行,通常用于进程间的同步。
    print('Child1 exit code {}'.format(p1.exitcode))
    # p2.join()   # 设置p2的进程阻塞,如果不设置则主线程会执行完直接退出,但P2因未执行完而导致报错
    print('Child process end.')
    print('Child1 exit code {}'.format(p1.exitcode))
    print('Child2 exit code {}'.format(p2.exitcode))

输出如果:

Parent process 19020.
Child process will start.
Parent Process id: 19020 running seconds: 0
Child 1 Process id: 17752 running seconds: 0
Child 2 Process id: 17344 running seconds: 0
Parent Process id: 19020 running seconds: 1
Child 1 Process id: 17752 running seconds: 1
Child 2 Process id: 17344 running seconds: 1
Parent Process id: 19020 running seconds: 2
Child 2 Process id: 17344 running seconds: 2
Child 1 Process id: 17752 running seconds: 2

Parent Process id: 19020 running seconds: 3
Child 2 Process id: 17344 running seconds: 3
Child 1 Process id: 17752 running seconds: 3
Parent Process id: 19020 running seconds: 4
Child 2 Process id: 17344 running seconds: 4
Child 1 Process id: 17752 running seconds: 4

Child 2 Process id: 17344 running seconds: 5
Child1 exit code 0
Child process end.
Child1 exit code 0
Child2 exit code None

Process finished with exit code 0


总结

1、注意创建多任务模式在windows系统中只能是spawn模式,也即创建的子进程仅获得主进程必要的资源,但如果主进程退出了子进程可能会报错。
2、如p2进程如果没有p2.join()则主进程直接退出后程序会报错。

Python多进程 python 多进程 阅读详情

相关推荐

pyinstaller的库导入和多进程打包问题

以前使用py2exe进行打包,那也仅限于windows。后来由于工作原因需要在Linux上进行打包操作,那么就不能使用py2exe工具了,后来选择了pyinstaller。 在实际应用中,pyinstaller打包的效率和操作性很好,个人觉得比py2exe更加智能,但是也是有一些问题。 开发环境:Windows 7 + python3.4 一、import导入的问题 pyins

Xiong_Big的博客 2万+

1 - 进程 - Windows 10 - Python - multiprocessing - 简单多进程切换、进程传参、异步进程、守护进程(进程睡眠/堵塞和线程堵塞的区别)、主/子进程区分

目录一、单进程二、多进程的实现三、多进程传参四、获取多进程 id 编号五、主进程会等待所有的子进程执行结束再结束。六、设置守护进程,当主进程结束时,子进程也不再继续执行,直接结束。七、关于多进程必须加上 `if __name__ == "__main__"` 的理由(进程区分):八、Jupyter Notebook 与 进程区分的关联九、关于多进程与GPU的关系 一、单进程 一般来说我们运行可执行文件,如脚本文件等,就相当于是在运行一个进程,系统会自动分配资源给这个文件运行,而这个进程就是父进程,或者说是

Muxiu 2870

Python 多进程 multiprocessing Pool 坑

环境:win 7+spyder2.38+py3.5 这几天在写个使用 multiprocessing 调用 Pool 进程池的程序,原本使用函数的方式,一切正常。后来改成了 class的方式,就一直出问题,排查后发现如果在类中 使用了 自己定义的 import 的包中的类/函数/方法,然后多进程调用的方法中如果使用了这些,就会导致cpu高占用,但是程序并没有报错,最后测试使用如下的程序是可以

seanb的博客 2万+

windows的python多进程

windows 创建子进程时,子进程会导入当前文件

aiscong的博客 657

Python多进程同步——文件锁

Python多进程同步——文件锁

weixin_45001971的博客 8827

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 309

【多进程编程-线程】

每隔20ms左右,windows要查看当前所有的线程内核对象,在这些内核对象中,只有某些对象被视为可以调度的对象,Windows选择可调度线程内核对象中的一个,将他加载到CPU寄存器中,然后继续运行,当系统引导时,便可以加载CPU寄存器中的线程上下文,使线程运行。Itron系统中,初始创建的任务的状态是Dormant状态,这个时候任务还处于系统无法调度的状态,所以必须激活任务,激活任务的系统调用是sta_tsk,作用就是将指定任务由Dormant状态迁移到Ready状态。系统只调度可以调度的线程。

j8267643的博客 645

jlink驱动安装

jlink驱动下载安装及keil识别

qq_43868701的博客 3万+

【工程实践】python实现多进程

Python中比较常见的并发方式主要有两种:多线程和多进程。多线程即在一个进程中启动多个线程执行任务。一般来说使用多线程可以达到并行的目的,但由于Python中使用了全局解释锁GIL的概念,导致Python中的多线程并不是并行执行,而是“交替执行”。类似于下图。所以Python中的多线程适合IO密集型任务,而不适合计算密集型任务。Python提供两组多线程接口,一是thread模块_thread,提供低等级接口。

Dong_ZH的博客 3053

无线图像传输新突破:深度JSCC算法在低带宽环境下的性能实测

本文深入探讨了基于深度学习的信源信道联合编码(JSCC)算法在低带宽无线图像传输中的突破性表现。通过实测数据对比,深度JSCC在低信噪比环境下展现出卓越的鲁棒性,有效对抗传统方案的“悬崖效应”,实现图像质量的平滑下降,为远程医疗、工业巡检等严苛场景提供了新的解决方案。

weixin_29090089的博客 508

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1894

基于Windows平台的Python多线程及多进程学习小结

python多线程及多进程对于不同平台有不同的工具(platform-specific tools),如os.fork仅在Unix上可用,而windows不可用,该文仅针对windows平台可用的工具进行总结。 1.多线程 单线程中,如果某一任务(代码块)是long-time running的,则必须等待该任务(代码块)结束,才可以对下一个任务进行操作,为解决long-time 任务的bloc...

weixin_30576827的博客 1922

医疗工具识别(手术器械计数):基于YOLOv8的智能手术器械管理系统

YOLOv8是Ultralytics公司于2023年推出的最新一代目标检测算法,相比前代YOLOv5,在精度和速度上都有显著提升。Anchor-free检测:不再使用预定义的anchor boxes,简化了检测流程更高效的骨干网络:采用CSPDarknet53作为特征提取网络多尺度特征融合:通过PANet结构实现更好的小目标检测损失函数优化:使用CIoU损失提高边界框回归精度YOLOv8提供了多种规模的模型(n/s/m/l/x),可根据实际需求在精度和速度之间进行权衡。

YOLO 480

Python-多进程踩坑实记

python 的多进程在 windows 下存在一些奇怪的坑 ......

qq_37851620的博客 5310

诊断测试工具CANoe.DiVa从入门到精通系列——开门见山

### 工具主要用于测试ECU的诊断功能。关于自动化诊断测试可以分为如下内容: ### -> 1、根据诊断需求规范进行cdd文件的编辑(现阶段主要是诊断问卷调查表); ### -> 2、新建Diva工程,导入对应的诊断数据库文件生成测试用例; ### -> 3、新建CANoe工程,导入CANoe.DiVa生成的Diva工程; ### -> 4、根据测试报告进行错误处理。

Soly_kun的博客 3556

ardupilot BMI088加速度陀螺仪学习

本节主要记录ardupilot 中BMI088传感器的学习过程,欢迎批评指正。BMI088是一款高性能6轴惯性传感器,由16位数字三轴±24g加速度计和16位数字三轴±2000°/ s陀螺仪组成。 BMI088允许高精度测量方向和沿三个正交轴的运动检测。BMI088具有高振动鲁棒性和3 x 4.5 x0.95mm³的小尺寸,是用于无人机和机器人应用等恶劣环境的高性能IMU中的独特产品。 BMI088专门设计用于有效抑制由于PCB上的共振或整个系统的结构而可能发生的振动。 除了高振动稳定性外,BMI088的出

陌城烟雨 2056

windows下多进程加协程并发模式

好久没更新博客了。正好最近要整理一下最近这段时间做过的项目以及学习python的一些心得。如标题所示,今天就来说说windows下多进程加协程并发模式。其实网上还是蛮多在linux下的多进程加协程并发模式,本身linux对python的支持更好吧。但是由于本人的开发环境是windows的,而且网上关于这方面的资料还是少了一点,不过经过一番折腾,也算是弄出来了。废话不多说,先贴代码吧:...

KimKong1122的博客 205

Qt垂直滚动条QVerticalScrollBar详解:从基础到实战的控件开发指南

本文系统解析Qt中QVerticalScrollBar的用法,从基础概念到进阶技巧。主要内容包括:1)基础认知:介绍其继承关系、作用及典型应用场景;2)核心用法:创建方法、关键属性配置和信号槽连接;3)进阶技巧:自定义样式表美化外观,以及与自定义内容区域的联动实现;4)实战注意事项,如避免循环触发和高DPI适配等。文章强调掌握QVerticalScrollBar对提升Qt滚动类功能开发效率的重要性,并建议通过自定义文本编辑器实践巩固知识点。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 759

Python 进程和线程-多进程

很多同学都听说过,现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任务”的操作系统。什么叫“多任务”呢?简单地说,就是操作系统可以同时运行多个任务。打个比方,你一边在用浏览器上网,一边在听MP3,一边在用Word赶作业,这就是多任务,至少同时有3个任务正在运行。还有很多任务悄悄地在后台同时运行着,只是桌面上没有显示而已。现在,多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。

分享编程知识与技巧 致力于技术交流与学习 找我合作私聊 有偿解决计算机问题 1027

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python多进程系列(二)多进程模式

3、拷贝锁:如果锁在外面是锁定状态,拷贝到子进程的时候锁依然是锁定状态,但是是被子进程的主进程获取到的。2、运行之前会先创建一个什么都没有的进程,再创建进程的时候会根据模板创建一个子线程,按需传参。2、在内部创建python解释器,让该解释器再去运行你的代码,只传必要参数,按需传参。2、拷贝父进程的所有东西,当做子线程去执行,父进程有的在子进程都有。1、 不支持文件对象和线程锁等传参。1、不支持文件对象和线程锁等传参。1、支持文件对象和线程锁等传参。...

weixin_54542209的博客 610

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

windows下的多进程

# windows下的多进程操作,用multiprocessing模块来实现 from multiprocessing import Process import os #子进程执行代码 def run_proc(name): print('Run child process %s(%s)' %(name, os.getpid())) if __name__ == '__main__'...

weixin_44549853的博客 611

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

python多线程可以在windows下实现吗_基于Windows平台的Python多线程及多进程学习小结...

python多线程及多进程对于不同平台有不同的工具(platform-specific tools),如os.fork仅在Unix上可用,而windows不可用,该文仅针对windows平台可用的工具进行总结。1.多线程单线程中,如果某一任务(代码块)是long-time running的,则必须等待该任务(代码块)结束,才可以对下一个任务进行操作,为解决long-time 任务的block问题,...

weixin_39580124的博客 309

Python多进程环境下的文件锁机制实战:解决备份系统重复执行问题

本文针对多进程Web应用中备份任务重复执行的问题,提出了一种基于文件锁的解决方案。文章首先分析了问题背景:在4个uvicorn进程负载均衡环境下,每个进程独立创建备份调度器,导致同一备份任务被多次执行。原有的进程内锁机制无法解决跨进程冲突。 作者设计了双重保护机制:1)只在主进程启动调度器;2)实现跨进程文件锁。重点介绍了Windows兼容的文件锁类实现,使用msvcrt.locking实现非阻塞独占锁,采用上下文管理器模式确保锁的正确获取和释放。实战应用中,通过全局文件锁配合进程内锁,彻底解决了备份任务并

yweng18的博客 996

Python-web框架-Django创建一个应用(简单的博客)详细步骤总结(一)

Python-web框架-Django创建一个博客应用

qiujin000的博客 6939

关于python的多进程的一些细节

不同平台的区别 在 windows平台,python是使用spawn方式创建子进程,即导入当前的脚本作为module运行。在linux平台,则是以fork的方式创建子进程,父进程会拷贝当前的进程信息给子进程,子进程和父进程在异步继续执行。 这两种方式的不同,会导致我们在写代码时需要注意一些细节,对于spawn方式,由于子进程是重新导入一份脚本,所以创建子进程之前的代码也有可能被子进程执行,导致子进程又创建子进程,会出错。我们需要加入if name == 'main’来规避这种意外,即将只希望主进程执行的代

m0_38043555的博客 1137

Python多进程避坑-线程创建后自动启动并进入阻塞模式

Python多进程避坑-线程创建后自动启动并进入阻塞模式1.配置环境2.问题描述3.问题解决4.问题分析5.参考文献6.结束语 1.配置环境 使用环境:python3.8 平台:Windows10、Ubuntu20.04 IDE:PyCharm 2.问题描述 Python在创建多线程时线程创建后自动启动并进入阻塞模式 代码如下 from threading import Thread import time class Main(): def work1(self): print

ShakalakaPHD的博客 1578
上一篇: Python 正则表达式应用,re模块
下一篇: Python 多线程如何按照任务优先级顺序执行,并根据任务分配来申请线程锁
PittDing
博客等级 码龄7年 227粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值