W10_Pipe_Manager数据共享_进程池和回调函数

Posted rootid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了W10_Pipe_Manager数据共享_进程池和回调函数相关的知识,希望对你有一定的参考价值。

[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中先创建一个属于进程的池子,这个池子指定能存放多少进程,任务存放于队列,等待进程池中的进程处理,当一个进程处理完一个任务后,并不销毁,而是放回进程池,然后继续去任务队列中拿取下一个任务,这就节省了进程被销毁和再创建的时间,也节省了过多进程调度的时间;
    信号量与之相比,只是节省了调度时间,因为信号里是控制进程执行的数量,并不能控制进程创建的数量。



```
```

  

以上是关于W10_Pipe_Manager数据共享_进程池和回调函数的主要内容,如果未能解决你的问题,请参考以下文章

多进程 multiprocessing 多线程Threading 线程池和进程池concurrent.futures

线程池和进程池的通用写法 ProcessPoolExecutor 和 ThreadPoolExecutor

进程---管道数据共享Manager进程池和回调函数(重要)

进程池和线程池 concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor

python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array

python全栈开发基础第二十二篇进程池和回调函数