if __name__ == '__main__':在一个多进程python程序中的必要性

Python中使用多进程时if __name__ == ‘__main__‘ 在不同操作系统里的必要性 代码如下: import multiprocessing def dance(): """跳舞""" print('The beauty is dancing') # if __name__ == '__main__': # 通过进程类创建进程对象 dance_process = multiprocessing.Process(target=dance) # 启动子进程 dance_pr 阅读详情
import multiprocessing, time

def test(i):
    while 1:
        print(i)
        time.sleep(.2)

# if __name__ == '__main__': --- 去掉则会报错
multiprocessing.Process(target=test, args=(1,)).start()
multiprocessing.Process(target=test, args=(2,)).start()

#RuntimeError: 
#        An attempt has been made to start a new process before the
#        current process has finished its bootstrapping phase.

#        This probably means that you are not using fork to start your
#        child processes and you have forgotten to use the proper idiom
#        in the main module:

#            if __name__ == '__main__':
#                freeze_support()
#                ...

#        The "freeze_support()" line can be omitted if the program
#        is not going to be frozen to produce an executable.

如果不加 if name == ‘main‘: 则会报错。

子进程会在运行时拷贝当前主进程中的所有内容,这也就意味着当一个新的子进程被创建的时候,该子进程就会复制当前模块,当然也包括了以下两行:

multiprocessing.Process(target=test, args=(1,)).start()
multiprocessing.Process(target=test, args=(2,)).start()

很显然,这样的写法可能形成无限递归式地创建新的子进程。所以为了避免以上情况发生,我们在此引入了 if name == ‘main‘: 。

以上内容参考:
https://stackoverflow.com/questions/34223502/why-does-this-multiprocessing-code-fail
https://blog.youkuaiyun.com/mihanglaoban/article/details/82319892

Python程序入口 __name__ == ‘__main__‘ 有重要功能(多线程)而非编程习惯 文章来源于互联网(https://jq.qq.com/?_wv=1027&k=rX9CWKg4) 在Python中,被称为「程序的入口」的 if name ==‘main’: 总是出现在各种示例代码中,有一种流传广泛的错误观点是「这只是Python的一种编码习惯」。事实上程序的入口非常有用,绝非可有可无,例如在Python自带的多线程库要求必须把主进程写在 if入口内部才能正常运行。 直接写在Python最左端没有缩进的代码,在这个 *.py 文件被直接运行、或者被调用时会被执行,只有写在 if n 阅读详情

相关推荐

【Python】if __name__ == “__main__“2

除了信号处理,Python 的 模块也提供了一种在程序正常退出时执行清理函数的方式。它注册的函数会在解释器即将关闭时(例如,当主程序执行完毕,或调用 时)被调用。 与 :适用场景: 运行 : 正常运行结束:在命令行中执行 。让程序运行几秒钟,直到它自动退出。 用户中断:在命令行中执行 ,然后立即按下 。 您会观察到在两种情况下, 文件都会被创建(如果不存在),并且其中会包含 “Application started.” 和 “Application stopped.” 的日志条目。这证明了 函数在

宅男很神经 727

python多进程中的目标函数必须在if __name__=='__main__'语句之前定义

python多进程中,对于子进程的运行机制是:每个子进程中,由于不同的进程之间有独立内存,不会共享,所以每个子进程是通过分别导入所在的脚本模块来实现目标函数的运行的。对于这个机制,有以下两点需要特别注意。 1、由于每个子进程是通过导入所在脚本的模块实现模块中函数的调用的,所以,为了避免将创建子进程的语句也被导入(因为这样就会造成无限循环创建子进程,这显然是不允许的,因此python...

S_o_l_o_n的博客 4440

【Python】if __name__ == “__main__“

要理解 ,我们必须首先回到原点,深入探究 Python 解释器是如何启动一个程序,以及它是如何看待和处理一个 Python 文件的。这不仅仅是简单的文件读取,它涉及到一个复杂的内部机制链条。当您在命令行中键入 并按下回车时,幕后发生了一系列复杂而精确的步骤。首先,操作系统会根据您的环境变量找到 可执行文件。这个可执行文件实际上是 Python 解释器的主程序。操作系统会将 作为参数传递给 解释器。一旦 Python 解释器被操作系统加载并开始执行,它会经历一个精密的初始化序列。 的构建: 是一个

宅男很神经 850

python编程中的if __name__ == 'main与windows中使用多进程

if __name__ == 'main 一个python的文件有两种使用的方法,第一是直接作为程序执行,第二是import到其他的python程序中被调用(模块重用)执行。 因此if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程, 在if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为程序直接执行)才会被执行,而import...

python学习者的博客 786

LCL滤波器参数设计实战:从理论约束到工程选型指南

本文提供了LCL滤波器参数设计的实战指南,从理论约束到工程选型逐步拆解。核心在于平衡总电感量、电感比与电容值,确保谐振频率落在安全区间,以满足并网电流谐波标准并维持系统稳定。文章以10kW并网逆变器为例,给出了具体的参数计算流程与选型步骤,并强调了寄生参数、阻尼设计等工程实现细节。

c6d7e8f9g的博客 922

YonSuite如何新增用户并分配角色角色授权图文教程

用友YonSuite产品基础教学

ct341688的博客 619

【Python】Python多进程详解

进程(Process),顾名思义,就是进行中的程序。有一句话说得好:程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体。进程是资源分配的最小单元,也就是说每个进程都有其单独的内存空间。Unix/Linux系统通过fork系统调用创建一个进程,但是在Windows中并没有fork调用。但是别担心,Python中内置的multiprocessing模块是跨平台的,我们可以通过对multiprocess模块中的Process类进行实例化创建一个进程对象,如: 执行结果如下: 创建一个子

m0_59162248的博客 7200

dell r630 配置raid_DELL服务器RAID配置图文教程

名称解释:Disk Group:磁盘组,这里相当于是阵列,例如配置了一个RAID5,就是一个磁盘组VD(Virtual Disk): 虚拟磁盘,虚拟磁盘可以不使用阵列的全部容量,也就是说一个磁盘组可以分为多个VDPD(Physical Disk): 物理磁盘HS:Hot Spare 热备Mgmt:管理【一】创建逻辑磁盘1、按照屏幕下方的虚拟磁盘管理器提示,在VD Mgmt菜单(可以通过CTRL+P...

weixin_33253741的博客 3510

python中if __name__ == '__main__' 是什么意思

python 相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__' 下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于执行代码中,而是在日常工作中,为了调试某个模块的正确性,我们往往会在当前模块下直接写一个 if __name__ == '__main__' ,测试逻辑写...

不二的博客 2万+

Arduino-Pico:用Arduino生态开发树莓派RP2040双核与PIO实战

在嵌入式开发领域,微控制器编程是连接硬件与软件的核心技能。其原理在于通过编写代码直接控制处理器与外设,实现特定功能。掌握这项技术能极大提升开发效率,降低硬件操作门槛,广泛应用于物联网、智能硬件和自动化控制等场景。本文聚焦于如何利用Arduino这一广受欢迎的生态,来开发树莓派RP2040微控制器。RP2040以其双核Cortex-M0+架构和独特的可编程IO(PIO)硬件而著称,性能强大。通过第三方Arduino核心(arduino-pico),开发者可以沿用熟悉的Arduino语法和库,快速调用双核并行处

weixin_26905423的博客 381

浙政钉(专有钉钉)门户免登(超详细)

钉钉家族 介绍浙政钉门户免登之前,首先搞清楚几个软件的关系,软件分别是:钉钉,专有钉钉,浙政钉 钉钉 是阿里巴巴集团专为中小企业打造的沟通和协同的多端平台。 专有钉钉 原名 政务钉钉,有更开放的设计能力、集成能力、更结构化协同产品、更定制化开发平台。支持专有化部署,数据落本地,更安全、客户可对该产品持牌运营、结构化编排,协助构建本地应用中心、提供移动应用全面安全保障体系。 浙政钉 为规范浙政钉整体架构体系,按照统分结合原则,由省政府办公厅统一设计整体工作界面和系统框架,统筹指导全省统建应用建设,各单

一缕南风的博客 2万+

为什么我们需要if __name__ == __main__:

if __name__ == __main__没有意义?恰恰相反!

K_KK_KK_KK的博客 1409

本地部署AI应用:基于Google Gemini的banana-prompt快速上手指南

AI应用开发的核心在于将大模型能力集成到实际场景中,其原理是通过API调用将用户输入转化为模型可理解的指令,再由模型生成响应。这一技术价值在于降低AI应用开发门槛,实现数据本地化处理与隐私保护。在工程实践中,开发者常面临环境配置复杂、API集成繁琐等挑战。本文聚焦于使用banana-prompt工具包,通过TypeScript技术栈和npm包管理,快速在Windows本地部署基于Google Gemini API的AI应用。该方案特别适用于ai-prompts提示词工程和content-creation内容

weixin_27188815的博客 316

windows系统下python多进程创建子进程的代码必须在if name == ‘__main__’:代码块内的通俗解释

对于windows系统下python多进程创建子进程的代码必须在if __name__ == '__main__':代码块内的一些理解以及产生的疑问

m0_51980123的博客 1264

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6737

【网络安全】SSRF漏洞讲解

SSRF漏洞讲解一、初识SSRF漏洞1.定义2.产生原理3.会导致的危害4.常见产生SSRF的地方5.常见缺失函数二、SSRF漏洞利用1.函数(1) file_get_contents(2)fsockopen()(3) curl_exec()2.协议(1)file协议(2)http协议(3)dict协议(4)gopher协议三、绕过1.绕过方式(1)检查IP是否为内网IP(2)Host获取与DNS绕过(3)通过各种协议(4)利用URL解析器滥用问题四、修复修复方案五、小结 一、初识SSRF漏洞 1.定义

你在看屏幕的同时,屏幕也在注视着你 3181

Python 脚本文件中的 main() 函数 与 if __name__ == “__main__“

像类似 Python 这样的解释型编程语言,程序代码是逐行解释运行的,不需要 main() 函数,也不强制使用函数来组织程序。当使用 Python 写一个项目时,为了规范化程序结构,往往也会在作为程序入口的主脚本文件中自定义一个 main() 函数作为主函数,然后再在脚本文件末尾调用该函数。

谢TS的博客 2240

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python中的 if __name__ == '__main__' 是干嘛的?

如果你写过Java,就一定知道 public static void main 这个如绕口令一般的程序入口函数,即使写一个hello world也不可避免:相比之下 Python 就简单多了,0帧起手,直接 print:print('Hello World!')但如果你的Python练习时长超过2周半,就一定见过这样的写法:不管是教程里的示例、Github上别人的项目、还是AI生成的代码,都可能出...

Crossin的编程教室 1005

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【Python】if __name__ == “__main__“:

是 Python 中一种常用的模式,用于控制模块的执行方式。__name__和__main__。__name____name__是一个内置变量,用于表示当前模块的名称。当模块作为主程序运行时,__name__的值为"__main__"。当模块被其他模块导入时,__name__的值为模块的文件名(不包括.py扩展名)。__main____main__是一个特殊的字符串,表示当前模块是作为主程序运行的。它通常与__name__一起使用,以区分模块是被直接运行还是被导入。

Herbert 1278

Python中if __name__=="__main__" 语句在调用多进程Process过程中的作用

windows系统中没有unix/linux中的fork函数来提供多进程功能,但是在Python中提供了multiprocessing模块来完成多进程功能。在所有的示例代码中,都出现了if __name__=="__main__"的判断语句来正确完成多进程功能,那么这个判断语句究竟起到了什么作用。 先看一下在不使用这个判断语句时执行程序时会出现什么结果。 import os from mul...

ljwwjl的博客 2391

写了2年python,知道 if __name__ == '__main__' 什么意思吗?

相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于执行代码中,而是在日常工作中,为了调试某个模块的正确性,我们往往会在当前模块下直接写一个 if __name__ == '__main__',测试逻辑写在下面,这样,在其他模块...

Python专栏 8331

Python中if __name__ == ‘__main__‘的作用与原理详解

在Python模块化编程中,`__name__`是一个特殊的内置属性,它决定了模块的执行方式。当模块作为主程序直接运行时,`__name__`会被设置为'__main__';当被其他模块导入时,则显示模块名称。这一机制通过`if __name__ == '__main__'`条件判断,实现了模块代码的双重身份管理,既能作为独立脚本运行测试代码,又能安全地被其他模块复用。该设计模式广泛应用于单元测试隔离、命令行工具开发等场景,是Python工程实践中模块化组织的核心技巧。理解这一原理,有助于开发者编写更健壮、

weixin_34197488的博客 396

Python中if name == ‘main‘的妙用

if __name__ == "__main__"是Python中用于判断脚本执行方式的惯用方法。当文件直接运行时,__name__值为__main__;当被导入或创建子进程时,__name__变为文件名。这个机制主要用于:1)区分模块导入与直接执行,避免导入时自动执行测试代码;2)解决Windows多进程编程中的递归问题。通过这种方式,代码既能作为独立程序运行,又能安全地被复用,增强了灵活性和可维护性。

2302_77179144的博客 331

python--基础知识点--为什么windows下子进程的创建语句必须放在if __name__==‘__main__‘语句之后

python多进程中,对于子进程的运行机制是:每个子进程中,由于不同的进程之间有独立内存,不会共享,所以每个子进程是通过分别导入所在的脚本模块来实现目标函数的运行的。对于这个机制,有以下两点需要特别注意。 1、由于每个子进程是通过导入所在脚本的模块实现模块中函数的调用的,所以,为了避免将创建子进程的语句也被导入(因为这样就会造成无限循环创建子进程,这显然是不允许的,因此python禁止了在子进程中再创建子进程,否则会报错),创建子进程的语句必须在if __name__==’__main__‘语句之后定义,或

Chasing__Dreams的博客 792

Python中if name == main:的妙用

本文探讨了Python中程序的执行机制与入口实现方式。文章指出Python没有传统意义上的main函数,而是通过if __name__ == '__main__':结构来区分模块是被直接运行还是被导入使用。当.py文件直接运行时,__name__值为"__main__",该条件下的代码块会被执行;而当模块被导入时,__name__值为模块名,相关代码不会执行。这种机制既保证了模块的可复用性,又能实现独立运行时的功能测试。与Java等语言不同,Python代码是从上到下顺序执行的,不在函数

不忘初心,方得始终。不管前路如何艰难,只要心中有梦想,就有力量。 92
上一篇: Python 协程的详细用法和例子
下一篇: 成功解决NameError: name 'apply' is not defined
hellenlee22
博客等级 码龄9年 70粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值