[TOC]
#管道
```
from multiprocessing import Pipe,Process
def func(conn2):
    print(conn2.recv())
conn1,conn2 = Pipe()
conn1.send("Hello pipe")
p = Process(target=func, args=(conn2,))
p.start()
```
**多进程中管道异常EOFError**
```
from multiprocessing import Pipe, Process
import time
import random
def func_recv(conn1, conn2):
    conn2.close()
    while True:
        try:
            print(conn1.recv())
            time.sleep(random.random())
        except EOFError:
            conn1.close()
            print("recv done")
            break
def func_send(conn1, conn2):
    conn1.close()
    for i in range(4):
        conn2.send("msg %d" % i)
    conn2.close()
conn1, conn2 = Pipe()
recv_p = Process(target=func_recv, args=(conn1, conn2))
send_p = Process(target=func_send, args=(conn1, conn2))
recv_p.start()
send_p.start()
conn1.close()
conn2.close()
```
注意:多进程使用管道可能会出现数据不安全,需要加锁操作
[返回顶部](#top)
#进程间的数据共享
```
from multiprocessing import Manager
```
#进程池和回调函数
##1.为什么会有进程池的概念
   效率;
   每开启进程,开启属于这个进程的内存空间(如寄存器,堆栈,文件都会战用内存空间);
   进程过多,操作系统调试较为耗时
##2.进程池原理:
    python中先创建一个属于进程的池子,这个池子指定能存放多少进程,任务存放于队列,等待进程池中的进程处理,当一个进程处理完一个任务后,并不销毁,而是放回进程池,然后继续去任务队列中拿取下一个任务,这就节省了进程被销毁和再创建的时间,也节省了过多进程调度的时间;
    信号量与之相比,只是节省了调度时间,因为信号里是控制进程执行的数量,并不能控制进程创建的数量。
```
```
原文:https://www.cnblogs.com/rootid/p/9672290.html