python运行子进程时报错:The “freeze

编程入门 行业动态 更新时间:2024-10-05 05:22:50

python运行子进程<a href=https://www.elefans.com/category/jswz/34/1770019.html style=时报错:The “freeze"/>

python运行子进程时报错:The “freeze

问题描述:

执行子进程时程序会报错
代码如下:

import multiprocessing
import timedef dance():for i in range(3):print('跳舞中...')time.sleep(0.2)def sing():for i in range(3):print('唱歌中...')time.sleep(0.2)# 创建子进程
dance_process = multiprocessing.Process(target=dance)
sing_process = multiprocessing.Process(target=sing)
# 执行子进程
dance_process.start()
# 等待第一个子进程执行结束后执行第二个子进程
dance_process.join()
sing_process.start()

报错:


原因分析:

子进程实际上是对父进程变量、函数(方法)等的拷贝。对于linux和mac而言,创建子进程时,不会拷贝父进程的执行的代码,但是windows系统也会拷贝父进程执行的代码。所以在创建子进程时,拷贝了执行代码,其中包含了创建子进程的代码,如此递归,会无限制的创建子进程,进而报错。


解决方案:

将执行的程序放在主模块下,这样windows下,子进程不会拷贝主模块中的代码,防止陷入无限递归。
改进后的程序如下:

import multiprocessing
import timedef dance():for i in range(3):print('跳舞中...')time.sleep(0.2)def sing():for i in range(3):print('唱歌中...')time.sleep(0.2)# 主模块的作用
# 1、防止别人调用时执行(程序测试时使用)
# 2、防止子进程拷贝,陷入无限递归
if __name__ == '__main__':# 创建子进程dance_process = multiprocessing.Process(target=dance)sing_process = multiprocessing.Process(target=sing)# 执行子进程dance_process.start()# 等待第一个子进程执行结束后执行第二个子进程dance_process.join()sing_process.start()

更多推荐

python运行子进程时报错:The “freeze

本文发布于:2024-02-07 05:34:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753298.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:时报   进程   python   freeze

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!