使用multiprocessing.Process来开启进程

import os
import time
from multiprocessing import Process
def eat():
print('start eating',os.getpid())
time.sleep(1)
print('end eating',os.getpid)
def sleep():
print('start sleeping',os.getpid())
time.sleep(1)
print('end sleeping',os.getpid())
if __name__ =='__main__':
p1 = Process(target=eat)#创建一个即将要执行eat函数的进程对象
p1.start()#开启进程
p2 = Process(target=sleep)#开启一个即将要执行sleep函数的进程对象
p2.start()#开启进程
print('main:',os.getpid())
#我们打印后会发现每个进程都会有自己的进程id,我们主动开启了两个进程和一个main函数进程

join方法

  • 把一个进程的结束事件封装成一个join方法

  • 执行join方法的效果就是阻塞直到这个子进程执行结束就结束阻塞

  • 在多个进程中使用join方法

  • 主进程没有结束:等待子进程结束

  • 主进程负责回收子进程的资源

  • 如果子进程执行结束,父进程没有回收资源,那么这个子进程会变成一个僵尸进程

  • 主进程的结束逻辑

    • 主进程的代码结束

    • 所有的子进程结束

    • 给子进程回收资源

    • 主进程结束

import time
import random
from multiprocessing import Process
def send_mail(a):
time.sleep(random.random())
print('发送了一封邮件',a)
if __name__ == '__main__':
l = []
for i in range(10):
p = Process(target=send_mail,args=(i,))
p.start()
l.append(p)
print(l)
for p in l:p.join()#会产生阻塞,直到结束才会执行以后的代码
print(l)
# 阻塞 直到上面的十个进程都结束
print('封邮件已发送完毕')

主动开启进程与join方法的更多相关文章

  1. 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性

    一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...

  2. 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁

    创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...

  3. 进程中join方法的使用

    在进程中:join方法 是让主进程等待子进程运行完毕后再执行主进程的.(即主进程阻塞) 示例 # -*- coding: utf-8 -*- from multiprocessing import P ...

  4. python 开启进程两种方法 multiprocessing模块 介绍

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu\_count\(\)查看),在python中大部分情况需要使用多进 ...

  5. Day9 进程理论 开启进程的两种方式 多进程实现并发套接字 join方法 Process对象的其他属性或者方法 守护进程 操作系统介绍

    操作系统简介(转自林海峰老师博客介绍) #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景: ...

  6. day33——进程的创建方式、pid、空间隔离、join方法、其他属性、守护进程

    day33 进程创建的两种方式 在windows环境下,开启进程必须在______name______ == "______main______"下面 p.start(): 只是向 ...

  7. python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程

    python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...

  8. UDP代码编写、操作系统发展史、多道技术、进程理论与代码层面创建、进程join方法与进程对象方法

    昨日内容回顾 socket基本使用 # 内置的模块 import socket s = socket.socket() # 默认是TCP协议 也可以切换为UDP协议 s.bind((ip,port)) ...

  9. 03并发编程(多道技术+进程理论+进程join方法)

    目录 03 并发编程 03 并发编程

随机推荐

  1. 题解 Hunter

    传送门 一看这题subtasks就觉得最后能直接推个柿子出来--然而没推出来 首先状压的部分分:发现只需要统计猎人1还没死的状态的贡献,其它情况可以continue掉,有45pts 至于正解--发现我 ...

  2. docker部署elasticsearch-+-Kibana(6-8)-+-SpringBoot-2-1-6

    elasticsearch快速开始 docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e ...

  3. wpf 获得exe的运行路径

    System.Reflection.Assembly.GetEntryAssembly().Location

  4. 【转】new和malloc的区别

    1. 申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存. 自由存储区是C++基于new操作符的一个抽象概念,凡是通过n ...

  5. QT 中的QTableWidget

  6. Object--Date--calendar--System--StringBuilder--基本数据类型包装类型

    Object java.lang.Object类是Java语言中的根类,即所有类的父类 默认toString()方法打印的是对象在堆中的地址值 默认equals()方法比较的也是地址(String中对 ...

  7. 一些Java知识点

    1 import java.util.ArrayList; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 ...

  8. 在按照ROS官方步骤操作,同时用Git管理整个过程,git clone的新catkin_ws报错: catkin_package() include dir 'include' does not exist relative to

    在按照ROS官方步骤操作,同时用Git管理整个过程,git clone的新catkin_ws报错如下: CMake Error at /opt/ros/kinetic/share/catkin/cma ...

  9. mybatis第一个程序随笔

    今天继续学习了解如何写一个mybatis程序 创建了Dao层 1.1 创建一个UserDao接口 1.2 创建UserMapper.xml文件 在mybaits中文手册查找配置信息 <?xml ...

  10. Shell脚本基础及基本常用命令

    1.概述 脚本语言(shell.python):解释性语言,用解释器解释 运行效率低 | c.java:描述性语言,运行效率高 以.sh结尾会有高亮显示 执行: sh hello.sh 或者 chmo ...