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

```
```

  

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

时间: 2024-11-08 20:14:01

W10_Pipe_Manager数据共享_进程池和回调函数的相关文章

进程间的数据共享、进程池的回调函数和线程初识、守护线程

一.进程的数据共享 进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的 虽然进程间数据独立,但可以通过Manager实现数据共享. 把所有实现了数据共享的比较便捷的类都重新又封装了一遍,并且在原有的multiprocessing基础上增加了新的机制 list dict等 数据共享的机制 支持数据类型非常有限 list dict都不是数据安全的,你需要自己加锁来保证数据安全 Manager用法: Manager().dict() # 创建共享的字典 Manager().lis

第36篇 多进程的数据共享,进程池的回调函数,线程 什么是GIL锁,Threading模块记

内容概览: 进程 数据共享 进程池--回调函数 线程 线程的基础理论 什么是线程? 线程与进程的关系 GIL锁 线程的开启: Threading模块1,用多进程开启socket创建聊天 server端写了input函数会报错?因为服务器是高速运行的,自动化的为来访问的客户端提供服务, 不可能停下来等待管理员的输入,然后发送给客户.这就失去了自动化的意义. 2,进程池Pool()方法创建的进程,map()方法是否有返回值? p.map()得到的是迭代对象 import time from mult

Python网编_进程池的回调函数

将n个任务交给n个进程去执行每一个进程在执行完毕之后会有一个返回值,这个返回值交给callback函数指定的那个函数去处理这样的话所有的进程哪一个执行的最后快,哪一个就可以先进性统计工作这样就能在最短的时间内得到我们想要的结果 import time import random from multiprocessing import Pool def get(i): # 使用i模拟网站地址 在子进程中执行 time.sleep(random.random()) # 模拟不同的网站返回数据的时间

Python学习【第21篇】:进程池以及回调函数

python并发编程之多进程2-------------数据共享及进程池和回调函数 一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. ? 1 2 3 4 命令就是一个程序,按回车就会执行(这个只是在windows情况下) tasklist 查看进程 tasklist | findstr  pycharm   #(

Python 3 进程池与回调函数

Python 3 进程池与回调函数 一.进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Proces

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

一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. 命令就是一个程序,按回车就会执行(这个只是在windows情况下) tasklist 查看进程 tasklist | findstr pycharm #(findstr是进行过滤的),|就是管道(tasklist执行的内容就放到管道里面了, 管道后面的findst

进程池与回调函数

一.进程池(重点) 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 1.很明显需要并发执行的任务通常要远大于核数 2.一个操作系统不可能无限开启进程,通常有几个核就开几个进程 3.进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进

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

#   管道 from multiprocessing import Pipe,Process def func(conn1,conn2): conn2.close() #子进程只关闭conn2时会抛出一个EOFError(没数据可取时recv),根据EOFError结束循环 while True: try : msg = conn1.recv()#不判断话会阻塞 print(msg) except EOFError: conn1.close() break if __name__ == '__

使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据

1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from multiprocessing import Pool 7 8 # response = requests.get('http://www.baidu.com') # 访问网页获取网页内容,得到一个网页内容的结果对象<Response [200]>这个200是一个状态码,200表示网页正常的返回,40