day27_python_1124
1.内容回顾
2.今日内容
3.创建-进程Process
4.join方法
5.进程之间数据隔离
1.内容回顾
# 进程 :是计算机中最小的资源分配单位
# 进程的三状态 :就绪 运行 阻塞
# 并发和并行 :
# 并行 :在一个时刻上,有多个进程在被CPU计算
# 并发 :在一个时间段上,有多个进程在被CPU计算
# 同步异步 :
# 同步 :一件事情与另一件事情有一定的顺序
# 异步 :两件事情可以同时进行
# 阻塞和非阻塞:
# 阻塞 : input sleep recv accept recvfrom
# 非阻塞 :不需要等待就可以直接完成的事情
2.今日内容
# 进程
# 如何去在python代码中 启动一个进程
# 新的模块 :multiprocessing
# 进程模块 :启动进程、基础的进程信息的获取、管理
# 进程的同步
# 进程之间的数据共享
# 进程之间的通信
# 进程池
3.创建-进程Process
import osimport timefrom multiprocessing import Process# print(os.getpid()) #线程id
def func(): time.sleep(1) print('hello',os.getpid())
if __name__ == '__main__': for i in range(10): Process(target=func).start() #开启进程 time.sleep(1) print('hello2',os.getpid())
# 几个概念 :
# 父进程 :父进程执行的过程中创建了子进程
# 子进程 :
# 主进程 :一般我们直接执行的那个程序就是主进程
# 为什么要有if __name__ == '__main__': windows操作系统开启子进程的方式问题
# 如何开启多个子进程 for while
getppid() #显示父进程
def func(): time.sleep(1) print('hello',os.getpid(),os.getppid())
if __name__ == '__main__': for i in range(3): p = Process(target=func) p.start() time.sleep(1) print('hello2',os.getpid())
# 如何给子进程传参数 ?
import timefrom multiprocessing import Process
def func(num,name): print(num,'hello',name)
if __name__ == '__main__': for i in range(10): p = Process(target=func,args=(i,'yuan',)) #(,)不能一个元素 p.start() #非阻塞 print('主进程')
# 子进程可以有返回值么?
# 不能有返回值
# 因为子进程函数中的返回值无法传递给父进程,因为内存隔离的问题
4.join方法
# 主进程会默认等待子进程结束之后才结束# 父进程要负责回收子进程占用的操作系统资源import timefrom multiprocessing import Process
def wahaha(): time.sleep(3) print('in wahaha')
if __name__ == '__main__': Process(target=wahaha()).start() print('主进程')
import timefrom multiprocessing import Process
def send_mail(n): time.sleep(0.5) print('发送邮件%s'%n)
if __name__ == '__main__': l = [] for i in range(10): p = Process(target=send_mail,args=(i,)) l.append(p) p.start() for p in l: p.join() #阻塞到所有子进程执行完 print('所有的邮件都已经发出')
5.进程之间数据隔离
from multiprocessing import Processn = 100def func(): global n n = n - 1if __name__ == '__main__': p_lst = [] for i in range(100): p = Process(target=func) p.start() p_lst.append(p) for p in p_lst: p.join() print(n)
day27_python_1124的更多相关文章
随机推荐
- DUILIB消息处理过程
DUILIB消息处理机制 方法一. 首先窗口基类创建 CWindowWnd->Create() 调用 CWindowWnd->RegisterWindowClass() 注册 CWindo ...
- linux 安装oracle
报错1:报display相关错误su - oracleDISPLAY=redhat64-2:1 --此处为远程会话地址(可以写localhost或IP均可)export DISPLAYcd /home ...
- SpringBoot Tomcat启动报错
中间的桥梁就是下面这个依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over ...
- Spark机器学习基础二
无监督学习 0.K-means from __future__ import print_function from pyspark.ml.clustering import KMeans #from ...
- C#操作Control异步工具类
/// <summary> /// 异步工具类 /// </summary> public class TaskTools { /// <summary> /// ...
- 【Core】当前 .NET SDK 不支持将 .NET Core 2.2 设置为目标。请将 .NET Core 2.1 或更低版本设置
问题起因: 新的电脑,打开core2.2的项目时,因为没有安装2.2 sdk,项目编译失败 所以在选择目标框架下拉框选择安装其他目标框架 会跳转到官网下载sdk:https://dotnet.micr ...
- 【编程语言】Kotlin之object关键字
在一个体重秤项目里面使用Kotlin开发,考虑到项目比较小型轻量,所以和团队申请决定使用Kotlin开发,以此熟悉和尝试一下Kotlin. 首先使用Kotlin之后,发现能和Java很好的兼容一起,开 ...
- python之做一个简易的翻译器(二)
把写好的python程序转换为windows系统下可以运行的exe文件 使用pyinstaller命令来进行转换 1.首先安装pyinstaller 可以在pycharm中安装,也可以直接使用pip命 ...
- 解决JS中取URL地址中的参数中文乱码
GET请求会将中文编码,如果取出乱码的话,应该进行解码操作, 下面的函数是获取指定参数名的参数值,参数值可是中文.英文. function getQueryString(name) { var reg ...
- C语言实验一(2)
#include<stdio.h>int main(){ char c1,c2; c1=97; c2=98; printf("c1=%c,c2=%c\n",c1,c2) ...