多进程代码
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())
# 注:本文是根据老男孩课程内容整理而成的,本文仅供个人笔记使用,如果有侵犯,请联系我,我立即撤销。