一.今日大纲

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('')
#操作系统是大型软件
#操作系统帮助我们调用硬件的 重点代码&重点注释分析
进程的创建方式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
我要等了...等我的子进程...
我是主进程!!!
												

并发编程5 操作系统&进程的更多相关文章

  1. Python3 与 C# 并发编程之~进程先导篇

      在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...

  2. Python并发编程01 /操作系统发展史、多进程理论

    Python并发编程01 /操作系统发展史.多进程理论 目录 Python并发编程01 /操作系统发展史.多进程理论 1. 操作系统 2. 进程理论 1. 操作系统 定义:管理控制协调计算机中硬件与软 ...

  3. 多并发编程基础 之进程 Process

    原贴  https://www.cnblogs.com/gbq-dog/p/10299663.html 1. 进程的理论知识 1.1 操作系统的背景知识 顾名思义,进程即正在执行的一个过程.进程是对正 ...

  4. python 之 并发编程(守护进程、互斥锁、IPC通信机制)

    9.5 守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就立即终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic process ...

  5. 并发编程,python的进程,与线程

    并发编程 操作系统发展史 基于单核研究 多道技术 1.空间上的复用 多个程序公用一套计算机硬件 2.时间上的复用 切换+保存状态 例子:洗衣 烧水 做饭 切换 1.程序遇到IO操作系统会立刻剥夺走CP ...

  6. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  7. Python3 与 C# 并发编程之~ 进程篇

      上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...

  8. python 并发编程 多进程 守护进程

    一 守护进程 主进程创建子进程目的是:主进程有一个任务需要并发执行,那开启子进程帮我并发执行任务 主进程创建子进程,然后将该进程设置成守护自己的进程 关于守护进程需要强调两点: 其一:守护进程会在主进 ...

  9. python并发编程之守护进程、互斥锁以及生产者和消费者模型

    一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: fr ...

随机推荐

  1. 顶部有一排按钮,最底下还有FooterView的ListView页面

    Android 先上效果图: 下面详细说说这个页面是怎么做出来的: 1.这个页面最下方可以看到一个TAB页签,分别是“主页”.“提及”等等,这个是一个在底部的TAB分页样式,在上一篇博客中已经介绍了 ...

  2. DEDECMS 添加栏目图片

    当我们一个栏目列表都用缩略图来表示产,而不仅仅只是文字,如果没有这项功能会非常麻烦,网上有很多这方面的资料,但是都试过了有很多问题,自己研究一下,测试基本通过.需要新加字段 typeimg 后台执行S ...

  3. Mysql主从(主从不同步解决办法,常见问题及解决办法,在线对mysql做主从复制)

    一.主从不同步解决办法 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; 也正常. mys ...

  4. java 环境配置 maven 环境配置

    1.windows 下Java 环境的安装和配置: 下载jdk并安装 配置环境变量: (1) 新建JAVA_HOME环境变量,赋值为JDK的安装目录: (2) 新建CLASSPATH环境变量,赋值为. ...

  5. Unity3D_NGUI_性能优化实践_CPU卡顿

    http://gad.qq.com/college/articledetail/7083468 博尔特以9.58秒创造了百米世界纪录,假设他是跑酷游戏的角色,卡顿一帧就足以把冠军拱手让人. Unity ...

  6. atitit.系统托盘图标的设计java swing c# .net c++ js

    atitit.系统托盘图标的实现java swing c# .net c++ js 1. 系统托盘图标的结构 1 2. Java swing的实现 1 3. .net的实现 1 4. C++的实现 1 ...

  7. JSON资料整理(转载)

    目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON 原始方式 通用方式 内置方式 契约方式 通过序列化将. ...

  8. 1.1 Application Fundamentals - 应用原理

    Android应用是使用Java编程语言编写的.Android SDK工具把代码.资源和数据文件编译为一个Android包,这是一个有.apk后缀的压缩文件.一个单独的.apk文件里包含所有的代码,这 ...

  9. cocos2dx位图字体bitmapfont使用

    参考此文,http://www.cocos2dres.com/post/87.html 在cocosbuilder里使用时有几个注意事项 1.中文保存时选择unicode 2.导出时选择 text 3 ...

  10. hdu 1213 (How Many Tables)(简单的并查集,纯模板)

    How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...