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