进程基础复习02
多进程代码
from multiprocessing import Process (以下的方法与属性都是Process)
方法
进程对象.start() 开启一个子进程
进程对象.join() 感知一个子进程的结束
进程对象.terminate() 结束一个子进程
进程对象.is_alive() 查看某个子进程是否还在运行
属性
进程对象.name 进程名
进程对象.pid 进程号
进程对象.daemon 值为True的时候,表示新的子进程是一个守护进程
守护进程 随着主进程代码的执行结束而结束
daemon 一定在start之前设置
1 # multiprocess.Semaphore 2 # 信号量 3 4 # 某一段代码 同一时间 只能被n个进程执行 5 # semaphore 信号量 6 # import time 7 # import random 8 # from multiprocessing import Process 9 # from multiprocessing import Semaphore 10 # 11 # def ktv(i,sem): 12 # sem.acquire() # 获取钥匙 13 # print("%s走进ktv"%i) 14 # time.sleep(random.randint(1,5)) 15 # print("%s走出ktv"%i) 16 # sem.release() 17 # 18 # if __name__ == "__main__": 19 # sem = Semaphore(4) 20 # for i in range(20): 21 # p = Process(target=ktv,args=(i,sem)) 22 # p.start() 23 24 # semaphore 其实内部也用了锁的机制,不过是多了一个计数器 25 26 27 28 # 通过一个信号 来控制 多个进程 同时 执行或者阻塞 ,可以通过事件来做这件事 29 30 # 一个信号可以使所有的进程都进入阻塞状态 31 # 也可以控制所有的进程解除阻塞 32 # 一个事件被创建之后,默认是阻塞状态 33 34 # from multiprocessing import Event 35 # e = Event() # 创建了一个事件 36 # print(e.is_set()) # 查看一个事件的状态,默认被设置成阻塞 37 # e.set() # 将这个事件的状态改为True 38 # print(e.is_set()) 39 # print(123456) 40 # e.wait(2) 41 # e.wait()是依据e.is_set()的值来决定是否阻塞的, 42 # 如果is_set()是False 那么wait就阻塞,如果是True,就不在wait()这个地方阻塞了。 43 # print(98765432) 44 45 # e.clear() # 将这个事件的状态改为False 46 # print(e.is_set()) 47 # e.wait(4) 48 # print("堵了") 49 50 # set 和 clear 51 # 分别用来修改一个事件的状态 True或者False 52 53 # is_set 用来查看一个事件的状态 54 # wait 是依据事件的状态来决定自己是否阻塞 55 # False 阻塞 True 不阻塞 56 57 # 灯的变化 就是事件状态的变化 58 # 红绿灯事件 59 # import time 60 # import random 61 # from multiprocessing import Event 62 # from multiprocessing import Process 63 # def car(e,i): 64 # if not e.is_set(): 65 # print("car%i在等待"%i) 66 # e.wait() 67 # print("car%i已经通行"%i) 68 # 69 # def light(e): 70 # while True: 71 # if e.is_set(): 72 # e.clear() 73 # print("\033[31m红灯亮了\033[0m") 74 # else: 75 # e.set() 76 # print("\033[32m绿灯亮了\033[0m") 77 # time.sleep(2) 78 # 79 # if __name__ == "__main__": 80 # e = Event() 81 # traffic = Process(target=light,args=(e,)) 82 # traffic.start() 83 # for i in range(20): 84 # cars = Process(target=car,args=(e,i)) 85 # cars.start() 86 # time.sleep(random.random())
# 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。