#管道Pipe
from multiprocessing import Process,Pipe#1
def func1(conn2):msg=conn2.recv()print('conn2:',msg)if __name__ == '__main__':conn1,conn2=Pipe()p=Process(target=func1,args=(conn2,))p.start()conn1.send('你好')#2
def func1(conn1,conn2):conn1.close()while 1:try:msg=conn2.recv()print('conn2',msg)except EOFError:break
if __name__ == '__main__':conn1,conn2=Pipe()p=Process(target=func1,args=(conn1,conn2))p.start()conn2.close()conn1.send('你好')conn1.close()

#数据共享 Manager
from multiprocessing import Process,Manager,Lock#1
def func1(m_dic):m_dic['name']='刘伟'print('子进程结束')if __name__ == '__main__':m=Manager()m_dic=m.dict({'name':'伟'})p=Process(target=func1,args=(m_dic,))p.start()print('主进程 :',m_dic)p.join()print('主进程 :', m_dic)#2
def func1(m_dic,lock):with lock:#加锁m_dic['count']-=1if __name__ == '__main__':lock=Lock()m_dic=Manager().dict({'count':100})lst=[]for i in range(20):p=Process(target=func1,args=(m_dic,lock))p.start()lst.append(p)[el.join() for el in lst]print('主进程m_dic:',m_dic)

#进程池
import time,os
from  multiprocessing import Process,Pool
#1
def func1(n):time.sleep(1)print(n)
if __name__ == '__main__':pool=Pool(4)pool.map(func1,range(100))#2进程池与多进程运行时间对比
def func(n):print(n)
if __name__ == '__main__':pool=Pool(4)pool_s=time.time()pool.map(func,range(100))#map异步执行的方法pool_e=time.time()pool_dif=pool_e-pool_sp_lst=[]p_s=time.time()for i in range(100):p1=Process(target=func,args=(i,))p1.start()p_lst.append(p1)[p.join() for p in p_lst]p_e=time.time()p_dif=p_e-p_sprint('进程池时间:', pool_dif)print('多进程时间:',p_dif)#3apply同步执行的方法
def func(i):time.sleep(0.5)return i**2
if __name__ == '__main__':pool=Pool(4)for  i in range(10):ret=pool.apply(func,args=(i,))print(ret)#4apply_async异步执行的方法
def func(i):time.sleep(2)print(os.getpid())return i**2
if __name__ == '__main__':pool=Pool(4)lst=[]for  i in range(10):ret=pool.apply_async(func,args=(i,))lst.append(ret)pool.close()#让进程池不再接受别的任务pool.join()#等待进程池进程全部执行完for i in lst:print('结果:',i.get())#get取不到会阻塞变为同步,所以用列表先放对象,在循环列表,元素点get取值#5 pool.close(),pool.join()
def func(i):time.sleep(2)print(i)return i**2
if __name__ == '__main__':pool=Pool(4)for  i in range(10):ret=pool.apply_async(func,args=(i,))pool.close()#不允许别的任务在使用进程池,不是关闭进程池pool.join()#感知进程池中任务的方法print('主进程结束')#6回调callback
def func1(i):print('func_id:',os.getpid())return i**2
def func2(m):print("func2_id:",os.getpid())print('func2>>>>',m)# return m**2if __name__ == '__main__':pool=Pool(4)ret=pool.apply_async(func1,args=(10,),callback=func2)print('ret:',ret.get())pool.close()pool.join()print('主进程id:',os.getpid())

  

转载于:https://www.cnblogs.com/PythonMrChu/p/9851328.html

进程之管道Pipe,数据共享Manager,进程池Poo相关推荐

  1. python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)...

    昨日内容回顾 进程 multiprocess Process -- 进程 在python中创建一个进程的模块startdaemon 守护进程join 等待子进程执行结束锁 Lock acquire r ...

  2. Python之路(第三十九篇)管道、进程间数据共享Manager

    一.管道 概念 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信. 先画一幅图帮助大家理解下管道的基本原理 现有2个 ...

  3. python 与别的程序通信_《Python》进程之间的通信(IPC)、进程之间的数据共享、进程池...

    一.进程间通信---队列和管道(multiprocess.Queue.multiprocess.Pipe) 进程间通信:IPC(inter-Process Communication) 1.队列 概念 ...

  4. Manage,管道的简单应用,进程池,队列的简单应用

    day37---Manage,管道的简单应用,进程池,队列的简单应用 今日内容: 1 生产者消费者模型 主要是为解耦 借助队列来实现生产者消费者模型 栈:先进后出(First In Last Out ...

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

    一.进程的数据共享 进程间数据是独立的,可以借助于队列或管道实现通信,二者都是基于消息传递的 虽然进程间数据独立,但可以通过Manager实现数据共享.把所有实现了数据共享的比较便捷的类都重新又封装了 ...

  6. python subprocess pipe_python类库31[进程subprocess与管道pipe]

    修改自: 原文 : Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More 一 程 ...

  7. 通过单管道(pipe)实现两个进程间双向通信

    用例: #include <stdio.h> #include <unistd.h>#define BUF_SIZE 30int main(int argc, char con ...

  8. 【并发编程三】C++进程通信——管道(pipe)

    [并发编程三]C++实现通信--管道(pipe) 一.管道(pipe) 二.匿名管道 1.简介 2.父子进程:匿名管道的通信过程? 3.相关函数 3.1.创建管道CreatePipe 3.2.写入管道 ...

  9. pipe 半双工_linux进程间通讯之管道(无名管道pipe)实现全双工双向通讯

    管道是什么: 1. 管道只能用于具备亲缘关系的进程之间通讯. 2.管道是一种单工或者说半双工的通讯方式,传递信息的方向是固定的,只能由一端传递到另外一端. 头文件及函数原型: #include int ...

  10. 无名管道PIPE,进行父子双进程的“双向通信”

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 本篇记录应用无名管道PIPE,进行父子双进程的"双向通信&qu ...

最新文章

  1. Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解
  2. PMP知识点(九、风险管理)
  3. 登录验证---过滤器(Fileter)
  4. urllib2库的基本使用
  5. 2018年计算机二级MySQL真题_2018年3月计算机二级考试MySQL真题及答案2
  6. Lucene开发(一):快速入门
  7. 【现代机器人学】基于指数积的机械臂逆运动学
  8. MVC.NET 出现诡异的 “IIS运行停止”
  9. 哈理工OJ 1926 函数式计算
  10. 论文阅读:Deep forest/深度森林/gcForest
  11. 51单片机 74LS138译码器流水灯+Proteus仿真
  12. Win10 数字认证
  13. Road Extraction by Deep Residual U-Net
  14. 距离度量 —— 杰卡德距离(Jaccard Distance)
  15. magento 为用户注册增加一个字段
  16. seajs学习(1)----什么是系统
  17. html左右滚动div隐藏部分div,只让DIV出现横向滚动条,窗口不要有滚动条
  18. 【Σ-Δ型ADC芯片】
  19. 华米Amazfit GTS 2e用续航和高性价比征服外媒
  20. 利用社交网络数据进行推荐

热门文章

  1. 初学Web:计算机气质个人主页
  2. 简单教程-word2vec处理英文语料
  3. 自然语言处理中/英文对比
  4. my python voyage
  5. 硬盘有摩擦声音_有摩擦的建筑物
  6. 南京邮电大学网络攻防训练平台逆向第三题PY交易
  7. 时间排序的SACK未确认报文链表
  8. Spring Security 自定义资源认证规则
  9. 与世界有怎样的关系,便拥有了怎样的自己
  10. LeetCode 水壶问题