#进程有三种方式进行通信
#通过进程队列Queue来实现进程间的通信
# import time
# import multiprocessing
# def foo(q):
# time.sleep(1)
# print("son process:",id(q))
# q.put(123)
# q.put("jack")
#
#
#
# if __name__ == '__main__':
# q=multiprocessing.Queue()
# p=multiprocessing.Process(target=foo,args=(q,))
# p.start()
#
# print("main process:",id(q))
# print(q.get())
# print(q.get())
#2通过管道pipe在实现进程间的通信
# from multiprocessing import Process,Pipe
# def f(conn):
# conn.send([12,{"name":"yuan"},'hello'])
# response=conn.recv()
# print("response:",response) #print Son Hello!
# conn.close()
# # print("q_Id2:",id(child_conn))
#
# if __name__ == '__main__':
# parent_conn,child_conn=Pipe() #双向管道
# # print("q_Id1:",id(parent_conn))
# p=Process(target=f,args=(child_conn,))
# p.start()
#
# print(parent_conn.recv()) #print [12,{"name":"yuan"},'hello']
# parent_conn.send("Son Hello!")
# p.join()
#3.通过Magager来实现进程数据共享
# from multiprocessing import Process,Manager
#
# def f (d,l,n):
# d[n]='1' #{0:"1"}
# d['2']=2 #{0:"1","2":2}
# l.append(n) #[0,1,2,3,4, 0,1,2,3,4,5,6,7,8,9]
# print('Son Process:',id(d),id(l))
#
#
# if __name__ == '__main__':
# with Manager() as manager:
# d = manager.dict() #{}
# l = manager.list(range(5)) #[0,1,2,3,4]
# print("main process:",id(d),id(l))
#
# p_list= []
#
# for i in range(10):
# p = Process(target=f,args=(d,l,i))
# p.start()
# p_list.append(p)
#
# for res in p_list:
# res.join()
# print(l)
# print(d)