当前位置: 首页 > news >正文

葫芦岛网站网站建设百度推广获客方法

葫芦岛网站网站建设,百度推广获客方法,成都新冠病最新消息,企业推广案例1 场景说明 在Python中,使用multiprocessing模块创建子进程时,将创建子进程的代码放在if __name__ __main__: 块之外,如下面代码: import multiprocessing import timedef test_func(name):print(f"子进程 {name} 开始运行…

1 场景说明

在Python中,使用multiprocessing模块创建子进程时,将创建子进程的代码放在if __name__ == '__main__': 块之外,如下面代码:

import multiprocessing
import timedef test_func(name):print(f"子进程 {name} 开始运行")time.sleep(2)  # 模拟任务执行print(f"子进程 {name} 结束运行")# 创建子进程
p = multiprocessing.Process(target=test_func, args=("1",))
# 启动子进程
p.start()
# 等待子进程结束
p.join()
print("主进程结束")

2 问题描述

代码执行过后,报错信息如下:

raise RuntimeError('''
RuntimeError: An attempt has been made to start a new process before thecurrent process has finished its bootstrapping phase.This probably means that you are not using fork to start yourchild processes and you have forgotten to use the proper idiomin the main module:if __name__ == '__main__':freeze_support()...The "freeze_support()" line can be omitted if the programis not going to be frozen to produce an executable.To fix this issue, refer to the "Safe importing of main module"section in https://docs.python.org/3/library/multiprocessing.html

3 原因分析

在 Python 中,使用 multiprocessing 模块创建子进程时,必须将创建子进程的代码放在if __name__ == '__main__':块中。这是因为在 Windows 和 macOS 上,Python 使用spawn方式启动子进程,这种方式会重新导入主模块。如果不将代码放在 if __name__ == '__main__': 块中,会导致子进程重新执行主模块的代码,从而引发递归创建子进程的问题。

4 解决方案

将创建子进程的代码块放到if __name__ == '__main__':

import multiprocessing
import timedef test_func(name):print(f"子进程 {name} 开始运行")time.sleep(2)  # 模拟任务执行print(f"子进程 {name} 结束运行")if __name__ == '__main__':# 创建子进程p = multiprocessing.Process(target=test_func, args=("1",))# 启动子进程p.start()# 等待子进程结束p.join()print("主进程结束")

5 Multiprocessing模块中子进程启动方式

5.2 启动方式说明

在 Python 的 multiprocessing 模块中,子进程的启动方式主要有三种:spawnforkforkserver。不同的操作系统默认使用不同的启动方式,而这些方式的行为和适用场景也有所不同。

5.3 默认启动方式

Windows: 默认使用 spawn
macOS(Python 3.8+): 默认使用 spawn
Linux/Unix: 默认使用 fork

5.4 设置启动方式

import multiprocessingdef worker():print("子进程运行")if __name__ == '__main__':# 设置启动方式,可选spawn、fork、forkservermultiprocessing.set_start_method('spawn')# 如果设置成fork,则会抛异常ValueError: cannot find context for 'fork'# 创建子进程p = multiprocessing.Process(target=worker)p.start()p.join()

5.5 如何选择启动方式

Windows/macOS: 默认使用 spawn,无需更改。

Linux/Unix:
如果需要快速启动且不涉及多线程,使用 fork。
如果需要避免资源冲突,使用 forkserver 或 spawn。

5.6 注意事项

5.6.1 多线程与 fork

在 Linux 上,如果父进程中有多线程,使用 fork 可能会导致死锁或资源冲突。在这种情况下,建议使用spawnforkserver

5.6.2 跨平台兼容性

如果代码需要在多个平台上运行,建议使用spawn,因为它是 Windows 和 macOS 的默认方式。

5.7 启动方式比较

启动方式spawnforkforkserver
描述重新启动一个 Python 解释器,只继承主进程中运行进程所需的资源。不会继承父进程的内存状态。直接复制父进程的所有资源(包括内存状态),创建子进程。先启动一个服务器进程,之后每次创建子进程都从该服务器进程 fork。
支持操作系统Windows、macOSLinux、UnixLinux、Unix
优点安全性高,避免了父进程状态不一致的问题。启动速度快,因为直接复制父进程状态。避免了直接 fork 父进程可能导致的问题。
比 spawn 更快,因为服务器进程已经初始化。
缺点启动速度较慢,因为需要重新导入模块和初始化环境。可能导致资源冲突(如文件描述符、锁等)。
在 macOS 上,fork 可能会导致问题(尤其是涉及多线程时)。
需要额外的服务器进程。
适用场景Windows 和 macOS(默认方式)。
需要避免共享父进程状态的场景。
Linux/Unix(默认方式)。
需要快速启动子进程且不涉及多线程的场景。
Linux/Unix。
需要频繁创建子进程且希望避免资源冲突的场景。
http://www.cadmedia.cn/news/12790.html

相关文章:

  • 怎么做网站代购网址链接查询
  • 杭州市下城区建设厅网站百度推广怎么操作
  • 如何使用wordpress制作网站app推广项目
  • 网站群建设标准百度权重排名查询
  • 广州 网站建设 020免费的网站域名查询
  • 郴州网站制作公司微信软文广告经典案例
  • 对网站建设提建议seo网站优化推广怎么样
  • 抖音小程序注册优化网站的意思
  • 彩票理财网站建设seo网络优化软件
  • 岳阳建设企业网站百度搜索指数排名
  • 网页设计图片欣赏seo查询站长工具
  • steam官方网站下载品牌策划案例
  • admin登录网站深圳网站优化排名
  • 凡客诚品商城seo优化团队
  • 深圳网站优化提供商合肥seo网络优化公司
  • 公司集团网站设计竞价账户托管哪家好
  • 网站建设 合肥企业网站优化的三层含义
  • 海外医疗网站建设东莞百度快速优化排名
  • 苏州网站建设公司科技城百度手机助手下载免费安装
  • 苏州seo网络推广深圳谷歌seo公司
  • 重庆网站设计定制百度客服在线咨询电话
  • 钦州建设银行社招聘网站推广运营是做什么的
  • 婚纱摄影介绍文山seo公司
  • 视频网站 如何做seo怎么自己做网站
  • 建设企业网站管理的重要性百度百科官网
  • 江苏建设监理网站百度快照怎么弄
  • 学校网站建设实训网络优化有前途吗
  • 乐从网站制作福建企业seo推广
  • 大型网站开发百度推广一年收费标准
  • 广州公司建设网站网店代运营的套路