进程
进程
一、创建进程
Tips
- 在linux平台上,需要对每个进程对象调用join()方法,否则该进程将持续存在
- 在win平台上,子进程必须在if__name__="__main__"下执行
1.普通创建
1 from mutiprocessing import Process
2 p = Process(target=func, args=(arg,))
3 p.start()
2.类式创建
1 class MyProcess(Process):
2 def __init__(self):
3 super(MyProcess, self).__init__()
4
5 def run(self):
6 # 需要多进程执行的逻辑(任务)
7
8 if __name__ == '__main__':
9 p_list = []
10 for i in range(3):
11 p = MyProcess()
12 p.start()
13 p_list.append(p)
14
15 for p in p_list:
16 p.join()
二、进程对象的静态字段
daemon # 设置为True的话,随主进程结束而结束
name # 进程名字,创建进程对象时自动生成
pid # 进程号
三、进程对象的方法
1 start()
2 join()
3 Setdaemon()
4 lock()
5 Rlock()
6 is_alive() # 判断进程是否在运行
7 run()
8 terminate() # 立即停止该进程
四、查看进程号
1 os.getppid() # 查看父进程id
2 os.getpid() # 查看自己的id
五、队列(queue)
Tips
- 用来存放共享数据的
- 如果子进程想用队列数据,需要将队列对象通过参数传入,因为进程间数据是独立的
from mutiprocessing import Queue
q = Queue()
q.put([arg,arg])
q.get()
六、Pipe
Tips
- 用来进程间的通信的
from multiprocessing import Pipe,Process
def func(conn):
conn.send()
conn.close()
parent_conn,child_conn = Pipe()
p = Process(target=func, args=(child_conn,))
p.start()
print(parent_conn.recv())
七、Manager
Tips
- 用来进程间共享数据的
from multiprocessing import Manager
with Manager() as manager:
dic = manager.dict()
lst = manager.list()
# 用法: 创建进程对象,并传入上述序列,需在缩进语句下创建