python多进程multiprocessing基础

简介

官方文档
multiprocessing是Python的标准模块,它既可以用来编写多进程,也可以用来编写多线程。如果是多线程的话,用multiprocessing.dummy即可,用法与multiprocessing基本相同

创建管理进程模块:

  • Process(用于创建进程模块)
  • Pool(用于创建管理进程池)
  • Queue(用于进程通信,资源共享)
  • Value,Array(用于进程通信,资源共享)
  • Pipe(用于管道通信)
  • Manager(用于资源共享)

    同步子进程模块:

  • Condition

  • Event
  • Lock
  • RLock
  • Semaphore

使用Multiprocessing疑问

  • 启动多进程的代码一定要放在 if name==”main“: 后面吗?
    解答:windows系统下,想要启动一个子进程,必须加上if name==”main“:,linux则不需要。

  • 父进程中的全局变量能被子进程共享吗?
    解答:不行,因为每个进程享有独立的内存数据,如果想要共享资源,可以使用Manage类,或者Queue等模块。

  • 子进程能结束其他子进程或父进程吗?如果能,怎么通过子进程去结束所有进程?
    解答:此需求可以稍作修改:所有的子进程都是为了完成一件事情,而当某个子进程完成该事情后,父进程就该结束所有子进程,请问该怎么做?此时结束所有子进程的操作可以交给父进程去做,因为子进程想要结束另外的子进程比较难实现。
    那么问题就又变成了父进程什么时候该结束所有进程?
    其中一个思路是获取每个子进程的返回值,一旦有返回True(结束的标记),则立马结束所有进程;
    另外一种思路是使用共享资源,父进程可以一直去判断这个公共资源,一旦子进程将它改变,则结束所有子进程。(推荐使用前者,因为多进程中不推荐使用资源共享)

  • 子进程中还能再创建子进程吗?
    解答:可以,子进程可以再创建进程,线程中也可以创建进程。

相关文章

【Multiprocessing系列】共享资源
【Multiprocessing系列】子进程返回值
【Multiprocessing系列】Pool
【Multiprocessing系列】Process
【Multiprocessing系列】Multiprocessing基础

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器