小知识点:在子进程中不能使用input输入! 一.守护进程 守护进程表示一个进程b 守护另一个进程a 当被守护的进程结束后,那么守护进程b也跟着结束了 应用场景:之所以开子进程,是为了帮助主进程完成某个任务,然而,如果主进程认为自己的事情一旦做完了就没有必要使用子进程了,就可以将子进程设置为守护进程 例如:在运行qq的过程,开启一个进程,用于下载文件,然而文件还没有下载完毕,qq就退出了,下载任务也应该跟随qq的退出而结束. from multiprocessing import Process…
目录 一:进程理论知识 1.理论知识 二:什么是进程? 三:僵尸进程与孤儿进程 1.僵尸进程 四:守护进程 1.什么是守护进程? 2.主进程创建守护进程 3.守护进程 五:互斥锁(模拟多人抢票) 1.什么是是锁? 2.什么是互斥锁? 3.为什么要使用互斥锁? 4.常见问题 5.注意 6.Lock模块 7.互斥锁(模拟多人抢票) 8.总结(抢票系统)解析 六:IPC机制(进程间通信)--队列 1.队列概况 2.Queue概念介绍 3.注意 4.(消息队列)代码搭建 七:(IPC消息队列)实现进程通…
'''1,什么是生产者消费者模型 生产者:比喻的是程序中负责产生数据的任务 消费者:比喻的是程序中负责处理数据的任务 生产者->共享的介质(队列)<-消费者 2,为何用 实现了生产者与消费者的解耦合,生产者可以不停地生产,消费者也可以不停地消费 从而平衡了消费者地生产能力与消费能力,提升了程序整体运行地效率 什么时候用? 当我们地程序中存在明显的两类任务,一类负责产生数据,另一类负责处理数据 此时我们就应该考虑使用生产者消费者模型来提升程序地效率 '''from multiprocessing…
一.守护进程 守护进程:一个进程B守护另一个进程A,当被守护的进程A结束,进程B也就结束了.(不一定同生,但会同死) 两个特点: ①守护进程会在主进程代码执行结束后就终止 ②守护进程内无法再开启子进程,否则抛出异常. 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 应用场景:如果主进程认为一旦自己结束,子进程也就没有继续运行的必要了,就可以将子进程设置为守护进程.(例如:qq正在调用自身的下载文件功能,但是此时退出了qq,下载进程也就可以直接关闭了) 方法为:process.d…
守护进程: b 进程守护 a进程,当a进程执行完毕时,b进程会跟着立马结束 守护进程用途: 如果父进程结束了,子进程无需运行了,就可以将子进程设置为父进程的守护进程 例如我们qq视频聊天时,当我们退出qq时,视频界面会跟着退出,视频就是qq的守护进程 守护进程语法: p.daemon = True #1.未设置守护进程 from multiprocessing import Process import time def task(): print("子进程run") time.sle…
1  守护进程: 主进程 创建 守护进程   辅助主进程的运行 设置进程的 daemon属性 p1.daemon=True 1 守护进程会在主进程代码执行结束后就终止: 2 守护进程内无法再开启子进程,否则抛出异常: AssertionError: daemonic processes are not allowed to have children 注意:进程之间是互相独立的,主进程代码运行结束,守护进程随即终止 from multiprocessing import Process impo…
一.守护进程 主进程创建子进程,然后将该进程设置成守护自己的进程,守护进程就好比崇祯皇帝身边的老太监,崇祯皇帝已死老太监就跟着殉葬了. 关于守护进程需要强调两点: 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemonic processes are not allowed to have children 如果我们有两个任务需要并发执行,那么开一个主进程和一个子进程分别去执行就ok了,如果子进程的任务在主进程任…
多道技术 1.空间上的复用 多个程序共用一套计算机硬件 多道技术原理 2.时间上的复用 ​ 切换+保存状态 ​ 1.当一个程序遇到IO操作 操作系统会剥夺该程序的CPU执行权限( 提高了CPU的利用率,并且也不影响程序的执行效率 ) ​ 2.当一个程序长时间占用CPU 操作系统也会剥夺该程序的CPU执行权限( 降低了程序的执行效率 ) 并发: 看起来像同时运行就可以 并行: 真正意义上的同时运行 ​ 单核的计算机不能实现并行,但是可以实现并发 进程 程序和进程的区别 程序: 一段代码 进程: 正…
操作系统发展史(主要的几个阶段) 初始系统 1946年第一台计算机诞生,采用手工操作的方式(用穿孔卡片操作) 同一个房间同一时刻只能运行一个程序,效率极低(操作一两个小时,CPU一两秒可能就运算完了) 联机批处理系统 脱机批处理系统 多道程序系统 1.空间上的复用 ​ 多个程序公用一套计算机硬件 2.时间上的复用 ​ 切换+保存状态 ​ 保存状态:保存当前的运行状态,下次接着该状态继续执行 ​ 切换的两种情况 ​ (1) 当一个程序遇到 I/O 操作(不需要使用CPU),操作系统会剥夺该程序的C…
目录 进程互斥锁 队列和堆栈 进程间通信(IPC) 生产者和消费者模型 线程 什么是线程 为什么使用线程 怎么开启线程 线程对象的属性 线程互斥锁 进程互斥锁 进程间数据不共享,但是共享同一套文件系统, 互斥锁:让并发变成串行,牺牲了执行效率,保证了数据安全 应用:在程序并发执行时,需要修改数据时使用 # data(json文件) {"target":1} # 模拟抢票功能.py import json import time from multprocessing import Pr…
八:事件(Event()) # 阻塞事件:    e = Event() 生成事件对象e    e.wait() 动态给程序加阻塞,程序当中是否加阻塞完全取决于该对象中的is_set() [默认返回值是False]    # 如果是True 不加阻塞    # 如果是False 加阻塞# 控制这个属性的值    # set() 方法        将这个属性的值改成True    # clear() 方法     将这个属性的值改成False    #is_set() 方法      判断当前属…
子进程回收资源两种方式 - 1) join让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源. - 2) 主进程 “正常结束” ,子进程与主进程一并被回收资源. from multiprocessing import Process import time # 任务 def task(): print('start....') time.sleep(2) print('end......') if __name__ == '__main__': p = Process(target…
[并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环 socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题) socketserver模块的使用 基于TCP协议的套接字--支持并发(拿之前通信的例子,主要针对服务端,客户端不变) # 服务端.py impo…
一.守护进程 主进程创建守护进程 守护进程其实就是'子进程' 一.守护进程内无法在开启子进程,否则会报错二.进程之间代码是相互独立的,主进程代码运行完毕,守护进程也会随机结束 守护进程简单实例: from multiprocessing import Process import time def task(name): #此时的task为守护进程 print('%s is running' % name) #该行并不会被打印,因为主进程结束,守护进程会随之结束 time.sleep(3) if…
Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进程 1. 僵尸进程 2. 孤儿进程 2. 进程互斥锁 3. 进程队列 4. 进程之间的通信 1. 僵尸进程/孤儿进程 1. 僵尸进程 定义:僵尸进程是当子进程比父进程先结束,而父进程又没有利用wait/waitpid回收子进程.释放子进程占用的资源,此时子进程将成为一个僵尸进程 主进程与子进程之间的…
原理:JDK的nio包中FileLock实现类似Linux fcntl的文件锁, 可使文件被进程互斥访问.  借助此功能, 可以实现强大的Java进程互斥锁, 从而在应用层面保证同一时间只有惟一的Jar应用进程在运行! 避免某些因素导致jar重复执行, 多个进程产生竞争,破坏业务数据. (当然, 你可以借助类似ubuntu的upstart脚本或者ps -p <pid>之类的做法来做到相同的功能).实现: package test; import java.io.File; import jav…
队列: queue.Queue(maxsize=0) #先入先出 queue.LifoQueue(maxsize=0) #last in fisrt out  queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列 Queue.qsize() Queue.put(item, block=True, timeout=None) Queue.put_nowait(item) Queue.get(block=True, timeout=None) Queue.ge…
多线程简介 多线程:在一个进程内部,要同时干很多事情,就需要同时执行多个子任务,我们把进程内的这些子任务叫线程. 线程的内存空间是共享的,每个线程都共享同一个进程的资源 模块: 1._thread模块 低级模块(在python3里基本已弃用) 2.threading模块 高级模块 对_thread模块进行了封装 threading模块使用 1.使用元组传递 threading.Thread(target=方法名,arg=(参数1,参数2...)) 2.用字典传递 threading.Thread…
1,生产者与消费者模型的矛盾在于数据供需的不平衡 import time import random from multiprocessing import Queue from multiprocessing import Process def producer(q,food): for i in range(5): q.put('%s-%s'%(food,i)) print('生产了%s'%food) time.sleep(random.random()) q.put(None) q.pu…
 1.简单的小例子: 下面这个例子主要观察的是: 一个对象的wait()和notify()使用情况! 当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对象的等待池中等待唤醒,这里说明一下,每一个对象都有一个独立的等待池和锁池! 等待池:上述的wait()后的线程会进入等待池中,处于下图线程声明周期(简单示意图) 中的这个状态,等待池中的线程任然具有对象的锁标记,但是处于休眠状态,不是可运行状态! 当该对象调用notify方法之后,就会在等待池中系统…
多线程中的生产者和消费者模型: 生产者和消费者可以用多线程实现,它们通过Queue队列进行通信. import time,random import Queue,threading q = Queue.Queue() def Producer(name): count = 0 while count <20: time.sleep(random.randrange(3))#随机时间间隔 q.put(count) print('Producer %s has produced %s baozi..…
关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非常重要的,本博客主要讲解多个线程之间使用wait()/notify()/notifyAll()来进行交互的场景. 一wait()/notify()/notifyAll(): 首先我们来看一下它们的函数定义: /* Causes the current thread to wait until ano…
queue队列 当必须安全地在多个线程之间交换信息时,队列在线程编程中特别有用. class queue.Queue(maxsize=0) #先入先出 class queue.LifoQueue(maxsize=0) #last in fisrt out  class queue.PriorityQueue(maxsize=0) #存储数据时可设置优先级的队列 没有数据会一直等.服务器端就会卡住. 有数据就取没有数据就抛出异常. block=true 阻塞 取不到数据就会阻塞IO timeout…
一.MIME类型 MIME类型格式:type/subtype(;parameter)? type:主类型,任意的字符串,如text,如果是*号代表所有 subtype:子类型,任意的字符串,如html,如果是*号代表所有 parameter:可选参数,如Accept请求头的q参数, Content-Type的 charset参数 几个常见的MIME类型如: HTML:text/html 表单数据:application/x-www-form-urlencoded JSON数据:applicati…
#1.生产者和消费者模型producer and consumer modelimport timedef producer(): ret = [] for i in range(2): time.sleep(0.2) ret.append("包子%s" %i) return retdef consumer(res): for index,baozi in enumerate(res): time.sleep(0.2) print("第%s个人,吃了%s" %(in…
知识点一:守护进程 守护进程:p1.daemon=True 守护进程其实就是一个“子进程“,守护=>伴随 守护进程会伴随主进程的代码运行完毕后而死掉 进程:当父进程需要将一个任务并发出去执行,需要将该任务放到以个子进程里 守护:当该子进程内的代码在父进程代码运行完毕后就没有存在的意义了,就应该 将该子进程设置为守护进程,会在父进程代码结束后死掉 from multiprocessing import Process import time def foo(): print(123) time.s…
1.守护进程 什么是守护进程? 进程是一个正在运行的程序 守护进程也是一个普通进程,意思是一个进程可以守护另一个进程,比如如果b是a的守护进程,a是被守护的进程,如果a进程结束,b进程也会随之结束. 使用场景: 父进程交给了子进程一个任务,子进程在执行过程中并没有执行完毕,但是父进程结束了,那么子进程就没又继续执行的意义了 使用方法:在start 前面加 deamon = Ture 案例: from multiprocessing import Process import time def t…
一.守护进程 主进程创建守护进程,守护进程的主要的特征为:①守护进程会在主进程代码执行结束时立即终止:②守护进程内无法继续再开子进程,否则会抛出异常. 实例: from multiprocessing import Process from threading import Thread import time def foo(): # 守护进程 print(123) time.sleep(1) print("end123") def bar(): print(456) time.sl…
一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. 二.Process类 Process([group [, target [, name [, args [, kwargs]]]]]) 由该类实例化…
Process类与开启进程.守护进程.互斥锁 一.multiprocessing模块 1.multiprocessing模块用来开启子进程,并在子进程中执行我们定制的任务(比如函数),该模块与多线程模块threading的编程接口类似. 2.multiprocessing模块的功能众多:支持子进程.通信和共享数据.执行不同形式的同步,提供了Process.Queue.Pipe.Lock等组件. 二.Process类 Process([group [, target [, name [, args…