码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2018-09-19 01:21:06      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:处理   任务队列   rom   error   系统   共享   rgs   返回顶部   pytho   

[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数据共享_进程池和回调函数

标签:处理   任务队列   rom   error   系统   共享   rgs   返回顶部   pytho   

原文地址:https://www.cnblogs.com/rootid/p/9672290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!