进程

进程


一、创建进程

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()
	# 用法: 创建进程对象,并传入上述序列,需在缩进语句下创建
posted @ 2021-03-10 12:29  notesForKai  阅读(57)  评论(0编辑  收藏  举报