Spawning 子线程

仅支持 Python >= 3.4.

依赖于 spawn 启动方法(在 Python 的 multiprocessing 包中)。

通过创建进程实例并调用join来等待它们完成,可以生成大量子进程来执行某些功能。这种方法在处理单个子进程时工作得很好,但在处理多个进程时可能会出现问题。

也就是说,顺序连接进程意味着它们将顺序终止。如果没有,并且第一个进程没有终止,那么进程终止将不被注意。 此外,没有用于错误传播的本地工具.

下面的spawn函数解决了这些问题,并负责错误传播、无序终止,并在检测到其中一个错误时主动终止进程.

torch.multiprocessing.spawn(fn, args=(), nprocs=1, join=True, daemon=False)

Spawns nprocs 进程运行 fn 使用参数 args.

如果其中一个进程以非零退出状态退出,则会杀死其余进程,并引发异常,导致终止。在子进程中捕获异常的情况下,将转发该异常,并将其跟踪包含在父进程中引发的异常中。

参数:

  • fn (function) –

    函数被称为派生进程的入口点。必须在模块的顶层定义此函数,以便对其进行pickle和派生。这是多进程强加的要求。

    该函数称为fn(i, *args),其中i是进程索引,args是传递的参数元组。

  • args (tuple) – 传递给 fn 的参数.

  • nprocs (int) – 派生的进程数.

  • join (bool) – 执行一个阻塞的join对于所有进程.

  • daemon (bool) – 派生进程守护进程标志。如果设置为True,将创建守护进程.

class torch.multiprocessing.SpawnContext

由 spawn() 返回, 当 join=False.

join(timeout=None)

尝试连接此派生上下文中的一个或多个进程。如果其中一个进程以非零退出状态退出,则此函数将杀死其余进程,并引发异常,导致第一个进程退出。

返回 True如果所有进程正常退出, False 如果有更多的进程需要 join.

使用例子:

参考:

https://github.com/sangho-vision/wds_example/blob/850fdff046e4b84215722d291ffad8c024062607/run.py

import utils.multiprocessing as mpuif cfg.NUM_GPUS > 1:torch.multiprocessing.spawn(mpu.run,nprocs=cfg.NUM_GPUS,args=(cfg.NUM_GPUS,train,cfg.DIST_INIT_METHOD,cfg.SHARD_ID,cfg.NUM_SHARDS,cfg.DIST_BACKEND,cfg,),daemon=False,)

multiprocessing.py

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved."""Multiprocessing helpers."""import torchdef run(local_rank, num_proc, func, init_method, shard_id, num_shards, backend, cfg
):"""Runs a function from a child process.Args:local_rank (int): rank of the current process on the current machine.num_proc (int): number of processes per machine.func (function): function to execute on each of the process.init_method (string): method to initialize the distributed training.TCP initialization: equiring a network address reachable from allprocesses followed by the port.Shared file-system initialization: makes use of a file system thatis shared and visible from all machines. The URL should start withfile:// and contain a path to a non-existent file on a shared filesystem.shard_id (int): the rank of the current machine.num_shards (int): number of overall machines for the distributedtraining job.backend (string): three distributed backends ('nccl', 'gloo', 'mpi') aresupports, each with different capabilities. Details can be foundhere:https://pytorch.org/docs/stable/distributed.htmlcfg (CfgNode): configs. Details can be found inslowfast/config/defaults.py"""# Initialize the process group.world_size = num_proc * num_shardsrank = shard_id * num_proc + local_ranktry:torch.distributed.init_process_group(backend=backend,init_method=init_method,world_size=world_size,rank=rank,)except Exception as e:raise etorch.cuda.set_device(local_rank)func(cfg)

pytorch Spawning 子线程相关推荐

  1. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  2. c# ThreadPool 判断子线程全部执行完毕的四种方法

    1.先来看看这个 多线程编程 多线程用于数据采集时,速度明显很快,下面是基本方法,把那个auto写成采集数据方法即可. using System; using System.Collections.G ...

  3. Android线程之主线程向子线程发送消息

    和大家一起探讨Android线程已经有些日子了,谈的最多的就是如何把子线程中的数据发送给主线程进行处理,进行UI界面的更新,为什么要这样,请查阅之前的随笔.本篇我们就来讨论一下关于主线程向子线程如何发 ...

  4. python线程的注意点(线程之间执行是无序的、主线程会等待所有的子线程执行结束再结束(守护主线程)、线程之间共享全局变量、线程之间共享全局变量数据出现错误问题(线程等待(join)、互斥锁))

    1. 线程的注意点介绍 线程之间执行是无序的 主线程会等待所有的子线程执行结束再结束 线程之间共享全局变量 线程之间共享全局变量数据出现错误问题 2. 线程之间执行是无序的 import thread ...

  5. python多线程的使用(导入线程模块、创建子线程任务、启动子线程任务、获取当前执行的线程号)

    1. 导入线程模块 #导入线程模块 import threading 2. 线程类Thread参数说明 Thread([group [, target [, name [, args [, kwarg ...

  6. node开启子线程_真Node多线程

    本文测试使用环境: 系统:macOS Mojave 10.14.2 CPU:4 核 2.3 GHz Node: 10.15.1 从 Node 线程说起 一般人理解 Node 是单线程的,所以 Node ...

  7. python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式

    threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...

  8. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)

    Qt之主线程与子线程通信(linux下) 转载请注明出处:http://blog.csdn.net/feng1790291543 主线程与子线程通信主要是通过Qt上的Gui按钮,触发使得主线程上的信息 ...

  9. python主辅线程_python主线程捕获子线程的方法

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...

最新文章

  1. 一位大神写的js爬虫
  2. Java并发编程实践读书笔记(3)任务执行
  3. Granular Computing(粒计算)
  4. 记录gulp报错The following tasks did not complete: cssmin或类似任务
  5. wxWidgets:国际化
  6. mysql主从复制优化_MySql优化之主从复制
  7. 使用ReportStudio打开cube模型创建报表出现两个最细粒度名称
  8. 爬虫必须学会的正则表达式
  9. FreeSWITCH第三方库(视频)的简单介绍(二)
  10. Tip: 强制 Outlook 用户使用缓存模式
  11. python鼠标移动的方法_python自动化之鼠标移动
  12. oracle mod函数
  13. 你不知道的Word中制作表格的7个技巧
  14. 学习编程,以“上帝视角”创造和改变这个世界
  15. 【新知实验室】TRTC
  16. padStart()和padEnd()
  17. 360[极速模式]浏览器无法加载插件(mooc)的解决方案摸索
  18. att汇编教程 linux,att 汇编 helloworld
  19. 解决docker的Get https://registry-1.docker.io/v2/: net/http: request canceled 报错
  20. 我们该如何应对AI造假

热门文章

  1. Centos7.2搭建Openstack无法成功启动Trove
  2. Linux内核源码中使用宏定义的若干技巧
  3. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc
  4. pyqt5切换python版本_PyQt5每天必学之切换按钮_python
  5. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
  6. java list 拼接 字符串数组_把数组所有元素排序,并按照“参数=参数值”的模式用“”字符拼接成字符串...
  7. mysql 本周函数_【转】MySQL时间函数的使用:查询本周、下周、本月、下个月份的数据...
  8. 计算机里的音乐都是什么名字,PAPI
  9. arm ida 伪代码 安卓 符号表_IDA调试界面介绍及快捷键
  10. 同花顺python_python的解析库pyquery解析并读取同花顺网站的焦点新闻