首页 > 系统相关 >并发编程5 操作系统&进程

并发编程5 操作系统&进程

时间:2022-11-14 12:08:07浏览次数:43  
标签:__ p1 操作系统 Process 编程 print 并发 进程 import

一.今日大纲

1.multiprocessing模块简单应用

2.for循环创建进程

3.进程传参方式和创建方式2

4.join方法

5.操作系统基础

二.今日内容

(1)操作系统简单介绍
多道技术:(超级重点)
空间复用
时间复用
进程之间是空间隔离的
分时系统
实时系统
通用操作系统(遇到io切换的会提高代码效率),

并发:又称伪并发,看着像同时运行,其实是任务之间的切换(遇到IO切换的会提高代码效率)
任务切换+保存状态(保存现场)
并行:真正的同时在运行,应用的是多核技术(多个cpu)

进程三状态:就绪(等待操作系统调度去cpu里面执行) 执行 阻塞

提交任务的方式:同步异步
任务的执行状态:阻塞非阻塞
异步:任务的提交方式,多个任务提交出去,同时执行

同步堵塞:
异步堵塞:

同步非堵塞:
异步非堵塞:

(这里是开启进程)

(2)进程的两种创建方式
Process(target=f1,args=(i,)) kwargs={'形参名为key':值}

(3)
#例子
from multiprocessing import Process

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

def run(self):
pass
if __name__='__main__':
P=MyProcess(12)
P.start()

join方法:主进程等待子进程执行结束再继续执行
没有join的话,先执行主进程中的内容
for 循环开启进程
三.详细内容
(1)multiprocessing模块简单应用:
#运行中的程序叫做进程
import time
time.sleep(1)
print('123')
#操作系统是大型软件
#操作系统帮助我们调用硬件的

重点代码&重点注释分析
进程的创建方式1
import time
from multiprocessing import Process
def f1():
time.sleep(3)
print('xxx')
def f2():
time.sleep(3)
print('sss')
#f1()
#f2()
#重点理解:windows系统下必须写main,因为windows系统创建子进程的方式决定的,开启一个子进程,
# 这个子进程会copy一份主进程的所有代码,并且机制类似于import引入,这样就容易导致引入代码的时候,
# 被引入的代码中的可执行程序被执行,导致递归开始进程,会报错
if __name__=='__main__':
p1=Process(target=f1,) #子进程相当于copy主进程的内容一份
p2=Process(target=f2,)
p1.start() #先调用主程序内的,再执行自己的并且,
# 所有start必须执行完,才可以执行,
p2.start()

time.sleep(3) #仅限于我们的程序
# p1.join() #意思是子进程执行完才执行主进程
# p2.join()
print('我是主进程!!')

'''
不注释
p1.join()
p2.join():
结果:
xxx
sss
我是主进程!!

注释
p1.join()
p2.join():
结果:
我是主进程!!
xxx
sss
'''

(2)for循环创建进程

import time
from multiprocessing import Process

def f1(i):
time.sleep(1)
print(i)

if __name__=='__main__':

for i in range(20):
p1=Process(target=f1,args=(i,)) #传参
p1.start()

注意:上边得到的结果是:0-19的20行数字,并且不是按照有序排列的

(3)演示两种传参方式

演示两种传参方式
方式一:
# import time
# from multiprocessing import Process
# def f1(i):
# time.sleep(3)
# print(i)
# if __name__=='__main__':
# p1=Process(target=f1,args=('冬瓜与黄瓜',)) #传参
# p1.start() #给操作系统发送一个创建进程的信号,后续进程的创建都是操作系统的事

方式二
# import time
# from multiprocessing import Process
#
# def f1(i):
# time.sleep(3)
# print(i)
# if __name__=='__main__':
# p1=Process(target=f1,kwargs={'i':'大牛'}) #传参//创建进程对象
# p1.start() #给操作系统发送一个创建进程的信号,后续进程的创建都是操作系统的事

案例:

from multiprocessing import  Process
class MyProcess(Process):
def run(self):
print('宝宝')
if __name__=='__main__':
p1=MyProcess()
p1.start()

(4)进程的创建方式2

#传参:需要重新写一个init方法
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,n):
super().__init__() #先执行父类的方法
#别忘了执行父类的init
''''''
'''
没有上面的一句话,会报错,原因是下面,所以必须继承父类的参数
assert self._popen is None, 'cannot start a process twice'
AttributeError: 'MyProcess' object has no attribute '_popen'
'''
self.n=n #自己定义的形式参数n

def run(self):
print('宝宝and%s不可告人的事情'%self.n)
if __name__=='__main__':
p1=MyProcess('搞忘')
p1.start()

(5)join方法

import time
from multiprocessing import Process
def f1():
time.sleep(2)
print('xxxx')
def f2():
time.sleep(2)
print('ssss')
# f1()
# f2()
if __name__ == '__main__':

p1 = Process(target=f1,)
p1.start()
p1.join() # 主进程等待子进程运行完才继续执行

print('开始p2拉') #这个地方相当于主进程

p2 = Process(target=f2,)
p2.start()
p2.join()
print('我要等了...等我的子进程...')
time.sleep(3)
print('我是主进程!!!')

'''
如果把两个join()方法注释掉,结果是:
开始p2拉
我要等了...等我的子进程...
xxxx
ssss
我是主进程!!!

不注释的结果是:
xxxx
开始p2拉
ssss
我要等了...等我的子进程...
我是主进程!!!

 



标签:__,p1,操作系统,Process,编程,print,并发,进程,import
From: https://blog.51cto.com/u_11182673/5848784

相关文章

  • 并发编程6 锁&进程&队列
    1.进程的其他方法2.验证进程空间隔离和守护进程3.孤儿进程和僵尸进程4.锁for循环加join数据共享5.进程队列的简单应用6.通过队列实现进程间的通信7.生产者消费者模型及Queu......
  • 并发编程8 线程的创建&验证线程之间数据共享&守护线程&线程进程效率对比&锁(死锁/递归
    1.线程理论以及线程的两种创建方法2.线程之间是数据共享的与join方法3.多线程和多进程的效率对比4.数据共享的补充线程开启太快5.线程锁互斥锁同步锁6.死锁现象和递归锁7.......
  • 一些网络编程方面的总结,以及redis、memcache、nginx组件的一些介绍
    网络编程主要关注的一些问题主要关注3个方面的问题连接的建立连接的断开消息的发送和到达连接的建立主要分为两种情况:服务器处理接受客户端的连接;服务端作为客户......
  • 编程中类的实例化
    https://zhidao.baidu.com/question/1861691860885843707.html在面向对象的编程中,通常把用类创建对象的过程称为实例化,其格式如下:类名对象名=new类名(参数1,参数2........
  • 学习笔记-《游戏编程模式》
    《游戏编程模式》全书内容梗概总结这是一篇超过万字读书笔记,总结了《游戏编程模式》一书中所有章节与内容的知识梗概。 目录与说明《游戏编程模式》一书中总共介绍......
  • 学习笔记-《GPU 编程与CG 语言之阳春白雪下里巴人》
    第一章绪论1.1ProgrammableGraphicsProcessingUnit发展历程ProgrammableGraphicsProcessingUnit(GPU),即可编程图形处理单元,通常也称之为可编程图形硬件。GP......
  • Java反应式编程(1)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 前面把Java函数式编程的由来和最主要的核心知识点讲完了。包括比较难懂的Lambda表达式是怎么演变而来的也全部都撸了一......
  • C++PrimerPlus中文第六版第6章编程练习答案
    1、#include<iostream>usingnamespacestd;intmain(){charch;cout<<"Entertext:\n";while(cin.get(ch)&&ch!='@'){if(isa......
  • 第十三章—TCP/IP和网络编程
    第十三章—TCP/IP和网络编程摘要TCP/IP和网络编程,分为两个部分。第一部分TCP/IP协议及其应用,具体包括TCP/IP栈、IP地址、主机名、DNS、IP数据包和路由器;TCP/P网络中......
  • PHP是最好的编程语言吗?
    编程语言很多,既然存在,就有每个存在的理由。不想评论,也没必要评论,哪个语言好,哪个语言不好,因为,其实,每个编程语言本身都不难,只要学会了一种语言,其他的都是相通的。难的,好......