踩坑日志2:dataloader的num_workers问题

news/2024/9/20 3:17:27/文章来源:https://www.cnblogs.com/joker-yyak/p/18415133

当我想用dataloader多开子进程加快图片加载速度时,发现报有关进程的错误:

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

原因:我使用的系统是Windows,与Linux系统在子进程底层操作上还有些不同。Windows是将脚本里所有东西都重新执行一次,所必需将与创建子进程的相关代码放在if __name__ == '__main__'中。

此外仅仅将部分代码放在if __name__ == '__main__'还不够,发现:如果__name__外面还有其他非定义类、非定义函数的代码,则有多少个num_workers就会重复执行多少次代码。其原因也是因为Windows创建进程的方式是重新运行主脚本。

 总结:如果要使用多进程,必须将创建多进程的代码放在if __name__ == '__main__'的保护之下,此外为了防止重复执行主脚本的代码,必须将主脚本中除定义类、函数以外的代码也放进去。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797568.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度!程序员生涯的垃圾时间(上)

深度好文!程序员的垃圾时间! 垃圾时间(Garbage time)是体育赛事中的术语,指一场比赛中双方分差过大,胜负已定。此时,比赛剩余的时间不再对最终结果产生决定性影响,剩下的时间就被称为垃圾时间。将这个词用在浩浩荡荡的技术革命、汹涌向前的历史车轮上,再合适不过。时代…

基于Java+Springboot+Vue开发的民宿预订管理系统

项目简介该项目是基于Java+Springboot+Vue开发的民宿预订管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的民宿预订管理系统项目,大学生可以在实践中学…

基于Java+Springboot+Vue开发的电影订票管理系统

项目简介该项目是基于Java+Springboot+Vue开发的电影订票管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的电影订票管理系统项目,大学生可以在实践中学…

解决c盘无故被大量占用问题

解决c盘无故被大量占用问题 问题引出 在用win10、win11的时候经常遇到c盘莫名其妙的就被占用完了,即便清理后也还是没将内存释放出来,这可能是因为虚拟内存过大导致的。 虚拟内存是什么 1.Windows虚拟内存机制 Windows虚拟内存是一种内存管理技术,它允许计算机在物理内存不足…

xyctf2024 pwn

hello world checksec大多保护都开启了 main函数 int __fastcall main(int argc, const char **argv, const char **envp) {char buf[20]; // [rsp+0h] [rbp-20h] BYREFinit();printf("%s", "please input your name: ");read(0, buf, 0x48uLL);printf(&qu…

BILIBILI 字幕提取教程简略版

首先是通过 F12 拿到 AID 和 CID(见其它文章),然后调用这个接口: https://api.bilibili.com/x/player/wbi/v2?aid={av}&cid={cid}{"code":0,"message":"0","ttl":1,"data":{"aid":1855215937,"bvid…

k8s Service 服务

目录一、为什么需要 Service二、Kubernetes 中的服务发现与负载均衡 -- Service三、用例解读1、Service 语法2、创建和查看 Service四、Headless Service五、集群内访问 Service六、向集群外暴露 Service七、操作示例1、获取集群状态信息2、创建 Service、Deployment3、创建客户…

获取动态页面html

AJAX AJAX(异步JavaScript和XML)是一种无需重新加载整个页面的情况下,与服务器交换数据,将增量信息局部更新在用户界面上的技术。AJAX具有异步性,AJAX请求不会阻塞用户界面,用户可以在请求处理的同时继续与页面交互,具有更强的交互性。AJAX能使网页从浏览器请求少量信息…

V-By-One协议详解

V-By-One协议详解 V-By-One协议简介 V-by-One是一种高速串行接口技术,由日本赛恩电子公司(THine Electronics)开发,主要用于平板显示器的信号传输。它旨在替代传统的LVDS(Low Voltage Differential Signaling)技术,提供更高的传输速率和更低的功耗。 V-By-One协议特点及…

(2)Proteus8.7添加STM32F103C6直接使用编译xxx.hex文件关键步骤

1)新建工程中选项 2)Protues8.7支持芯片如下:3)点击STM32选择 Keil编译生成的 xxx.hex文件 4)使用virtual terminal显示串口信息。仿真状态,点击Debug菜单项,按图操作。

AI 框架作用是什么?

AI 框架作用 深度学习范式主要是通过发现经验数据中,错综复杂的结构进行学习。通过构建包含多个处理层的计算模型(网络模型),深度学习可以创建多个级别的抽象层来表示数据。例如,卷积神经网络 CNN 可以使用大量图像进行训练,例如对猫狗分类去学习猫和狗图片的特征。这种类…

分布式学习:Raft算法以及具体实现

Raft算法 一致性算法的要求:安全性,网络延迟、分区、丢包、重复和乱序等错误需要保证正确 可用性:集群中只需要大多数机器即可运行 不依赖时序保证一致性三种状态:follower,candidate,leader 任期:逻辑时钟的作用,每一段任期从一次选举开始分票可能会导致一个任期没有l…