当主进程开启子进程后,主进程会与子进程并行执行。当主进程执行后不会立马结束进程,而是会等子进程结束才结束,好去清理僵尸子进程(给子进程收尸)。

进程之间内存是相互隔离的。当创建子进程时,会把父进程的内存空间拷贝一份到子进程,子进程的改变不会影响主进程的内存空间。

但进程之间的IO是共享的,可以同时操作同一个文件或终端。

第一种方式:

from multiprocessing import Processimport time

def task(name):    print('%s is running' % name)    time.sleep(3)    print('%s is done' % name)

if __name__ == '__main__':    p = Process(target=task, kwargs={'name': '子进程1'})    # p = Process(target=task, args=('子进程1',))    p.start()  # 仅仅只是给操作系统发送了一个信号,然后继续往下执行,不会等待子进程执行完成。但是会等子进程结束后,能结束主进程。

    print('主')

    #会执行子进程执行结束后,才结束自己进程。

# 输出结果:# 主# 子进程1 is running# 子进程1 is done

第二种方式: 继承的方式
from multiprocessing import Processimport time

class MyProcess(Process):    # 继承Process类    def __init__(self, name):        super().__init__()        self.name = name

    def run(self):   # 必须重写run方法        print('subprocess starting %s' % self.name)        time.sleep(3)        print('end subprocess %s' % self.name)

if __name__ == '__main__':    p = MyProcess('xxx')    p.start()     # start自动绑定到run方法    print('主线程')

# 输出结果:# 主线程# subprocess starting xxx# end subprocess xxx

进程之间,内存空间是相互隔离的:
from multiprocessing import Processn = 100  # 在windows系统中应该把全局变量定义在if __name__ == '__main__'之上就可以了def work():global nn = 0print('子进程内: ', n)if __name__ == '__main__':p = Process(target=work)p.start()p.join()print('主进程内: ', n)

输出:

子进程内: 0
主进程内: 100

转载于:https://www.cnblogs.com/beallaliu/p/9189845.html

5.1.2 网络编程进阶---开启子进程的两种方式,进程之间内存空间是相互隔离的...相关推荐

  1. 开启子进程的两种方式、进程间内存空间隔离、进程对象的方法或属性详解

    1.操作系统(推荐查看书籍:现代操作系统)     操作系统是位于计算机硬件与软件之间的控制程序     作用:         1.将硬件的复杂操作封装成简单的接口,给用户或者应用程序使用      ...

  2. 进程理论以及开启子进程的两种方式

    进程理论(book:现代操作系统) 为何开启子进程需要放在main下面:因为运行到start他会向操作系统发起启动子进程的信号,然后操作系统会把整个代码块执行下,找到子进程要执行的任务, 代码运行到最 ...

  3. 开启子进程的两种方式,孤儿进程与僵尸进程,守护进程,互斥锁,IPC机制,生产者与消费者模型...

    开启子进程的两种方式 # # # 方式一: # from multiprocessing import Process # import time # # def task(x): # print(' ...

  4. linux 僵尸进程deffunc,多进程-开启子进程的两种方式,查看进程的pid与ppid,僵尸进程与孤儿进程...

    一.开启子进程的两种方式 方式一: # 方式一: from multiprocessing import Process import time def task(name): print(" ...

  5. 7 并发编程-(线程)-开启线程的两种方式

    thread/英 /θred/ 美 /θrɛd/  线程 1.threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再 ...

  6. python 开启子进程的两种方式

    进程: 是程序执行过程 启动进程,用某种方式开启子进程,帮咱们把咱们这个进程里的某一个任务并发执行以下 from multiprocessing import Process import timed ...

  7. 学习笔记(16):Python网络编程并发编程-开启子进程的两种方式

    立即学习:https://edu.csdn.net/course/play/24458/296424?utm_source=blogtoedu #方式一:使用python内置模块multiproces ...

  8. 开启子进程的两种方式

    方式一 from multiprocessing import Process import timedef task(name):print('%s is running' % name)time. ...

  9. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程 2 为何要用线程    线程vs进程      1. 同一进程下的多个线程共享 ...

最新文章

  1. Android视图重绘,使用invalidate还是requestLayout
  2. [安全防护]StackGuard和StackShield
  3. 【企业管理】企业创造的要素
  4. checking for mysql_commit in -lmy_mysql2安装异常
  5. 剑指offer-面试题13.在O(1)时间删除链表节点
  6. PTA数据结构期末练习 - 单选题、判断题
  7. 爱情七十一课,低调恋爱
  8. 确认!这样学习 Python 能甩同行 10 条街!
  9. docker-compose 学习:部署 ThinkPHP 5 网站
  10. 企业从信息化角度解读智慧城市,难以根治城市病
  11. poi导出excel
  12. SQL安装过程中出现的错误解决
  13. linux 转换格式,linux下常见音频格式之间的转换
  14. Linux网卡bond
  15. Tomcat无法启动,报错java.lang.NoClassDefFoundError: or...
  16. springboot基于web的传染病信息管理系统的设计与实现毕业设计-附源码221124
  17. 山东超级计算机神威,世界最快超级计算机“神威·太湖之光”获得100多项应用成果...
  18. JS实现b站动态转发抽奖(小人数)新方案讲解
  19. 网站服务器选择什么操作系统,网站服务器选择哪种操作系统比较好
  20. 寻根究底,探讨 chi -square特征词选择方法后面的数学支持

热门文章

  1. JAVA面向对象的思维导图
  2. 2017.02.18 这一周的面试
  3. iuv_5g组网问题表
  4. u-boot之u-boot-2009.11启动过程分析
  5. 消防应急照明和疏散指示系统在轨道交通中的设计应用
  6. c++语言运算符,c++运算符
  7. casio计算机如何计算标准差,怎样在卡西欧5800里计算标准差和方差,不要普通计算,用里面设计好的模式,...
  8. 怎么起用计算机无线开关,笔记本电脑无线网卡,教您如何打开电脑无线网卡开关...
  9. 20230407 定时闹钟
  10. SpringBoot使用druid的密码加密