1.进程q

进程呢就相当于一个房子,线程就相当于是房子里面在工作的人,那么一个房子的空间对于房子里面的人来说是共享的,

现在是多进程,也就是说有许多房子,很显然这个房子的空间只属于这个房子,不会属于其他房子,那你应该明白我想说什么了,(一个进程里面资源是共享的,不同进程之间是相当于不同的程序,你QQ的消息微信能度的到嘛?很显然嘛,肯定是不能的,但是啊条件就来了,我擦我现在程序开了多进程,想让两个进程之间的数据交互怎么办?)

  解决这一问题的关键就要看你怎么理解进程这个概念了,现在别人qq发给你的东西你要在微信上发出去,怎么办,当然是先存到手机里面啊,然后在发出啊,对了。那么我们的进程queue就是这么一个过程,先把数据序列化存下来,然后在使用。相当于拷贝了一份

  

from multiprocessing import Queue, Process
import os def f(qq):
qq.get()
qq.put(6) if __name__ == '__main__':
q = Queue()
q.put(1)
q.put(2)
p = Process(target=f, args=(q,))
p.start()
p.join()
print(q.qsize())

2.线程不能给进程传q,所以线程queue的东西其他进程不能使用

3.进程q当作变量传入,其实不是传入,而是克隆进去了。其实是两个q只不过序列化了,因为进程通讯不能在内存里面操作,实际上是两个q不是一个共享q,要注意中间状态

*******************************************pipe********

pipe 相当于是一个管道在使用他之前我们需要把管道的头和尾打通,也就是生成两个对象,然后把一个对象当作参数传到进程里面就可以了

from multiprocessing import Process,Pipe
import os
def f(liu):
print('wocao pid:',os.getpid())
liu.send('wocao',) if __name__ == '__main__':
print('start ')
Parent_coon, child_coon = Pipe()
p = Process(target=f,args=(child_coon,))
p.start()
cc = Parent_coon.recv()
p.join()
print(cc)

4.manage数据共享 pipe

with Manager() as manger:
d = manger.dict()
l = manger.list()

那么manage呢就是简化了的特定的用来在进程之间交互的一个东西,他可以支持列表字典元组变量等等。

如上我们就生成了一个进程交互的字典与列表,使用他需要把他当作参数传入进去即可

# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki # 进程之间数据交互用一个中间状态的queue,也就是经进程queue from multiprocessing import Queue, Process, Manager # 导入一个进程queue
import threading
import queue
import os def f(d,l):
d['name'] = 'liu'
d[1] = 3
l.append(os.getpid())
print(l) if __name__ == '__main__':
with Manager() as manger:
d = manger.dict()
l = manger.list()
process_list = []
for i in range(10):
P = Process(target=f, args=(d, l))
P.start()
process_list.append(P)
for i in process_list:
i.join() print(d)
print(l)
5. 进程锁 进程为什么需要锁呢? 因为啊 所有进程都在共享同一快屏幕,所以需要锁,我们在main里面生成锁的实例,当作参数传进去

同一份pipe代码我们加上锁之后就变成了
from multiprocessing import Process,Pipe, Lock
import os
def f(l,liu):
l.acquire()
print('wocao pid:',os.getpid())
liu.send('wocao',)
l.release()
if __name__ == '__main__':
print('start ')
lock = Lock()
Parent_coon, child_coon = Pipe()
p = Process(target=f, args=(lock, child_coon))
p.start()
cc = Parent_coon.recv()
p.join()
print(cc)

进程池的概念就是说同一时间允许多少个进程在运行
在window上启动多进程就必须使用
if __name__ == '__main__':
并且pool要在其里面
pool 里面没有开启开进程的语句,只有apply 串行 apply_async并行这两个, 后者多了一个回调也就是 callback 有了回调,开进程的那个函数的返回值,将会作为参数传入回调的函数里面
# _*_coding:utf-8_*_
# /usr/bin/env python3
# Author:book Miki from multiprocessing import Process,Pool,freeze_support
import time
import os def f(i):
time.sleep(2)
print('this process pid is :', os.getpid())
return i+100 def bag(ar):
print('-->exec done: ', ar, os.getpid()) if __name__ == '__main__':
# freeze_support()
print(os.getpid())
pool = Pool(5) for i in range(10):
pool.apply_async(func=f,args=(i,), callback=bag) print('end')
pool.close()
pool.join()

串行的直接开就可以了,没有回调哦。回调的进程的pid号是主函数的pid号。也就是说回调函数是在主函数里面运行的哦。



python之 《进程之间数据交互和进程池》的更多相关文章

  1. Python利用pandas处理Excel数据的应用

    Python利用pandas处理Excel数据的应用   最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...

  2. Python数据分析--Pandas知识点(三)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...

  3. 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集

    这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...

  4. 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础

    在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...

  5. 基于 Python 和 Pandas 的数据分析(1)

    基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...

  6. python安装pandas和lxml

    一.安装python 二.安装pip 三.安装mysql-connector(window版):下载mysql-connector-python-2.1.3,解压后进入目录,命令安装:pip inst ...

  7. python之pandas用法大全

    python之pandas用法大全 更新时间:2018年03月13日 15:02:28 投稿:wdc 我要评论 本文讲解了python的pandas基本用法,大家可以参考下 一.生成数据表1.首先导入 ...

  8. python之pandas简单介绍及使用(一)

    python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...

  9. Python数据分析--Pandas知识点(二)

    本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...

  10. Python之Pandas中Series、DataFrame

    Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...

随机推荐

  1. MeteoInfoLab脚本示例:MODIS Sinusoidal投影HDF数据

    MODIS卫星很多陆面数据都是Sinusoidal投影,数据被分为一个个10*10度(赤道地区)的瓦片(http://modis-land.gsfc.nasa.gov/MODLAND_grid.htm ...

  2. 双栈排序(洛谷P1155)二分图的判定+思维贪心

    题目:戳这里 题目大意: 给你一个数列,问能否通过两个栈的push与pop把它输出成一个升序序列(每个数只能入队并出队一次) 不能的话输出0,能的话输出操作方法 主要思路: 1.判断是否可以成功输出升 ...

  3. git-submodule子模块的添加、使用和删除

    目录 添加 使用 更新 删除 hugo添加主题的时候 命令如下: git submodule add https://github.com/samrobbins85/hugo-developer-po ...

  4. html的keywords标签

    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon" /& ...

  5. Helium文档14-WebUI自动化-hover鼠标悬浮

    前言 hover 实现功能是将鼠标光标悬停在给定的元素或点上 入参介绍 element def hover(element): """ :param element: T ...

  6. 存储系列1-openfiler开源存储管理平台实践

    (一)openfiler介绍 Openfiler能把标准x86/64架构的系统变为一个更强大的NAS.SAN存储和IP存储网关,为管理员提供一个强大的管理平台,并能应付未来的存储需求.openfile ...

  7. 64位Ubuntu14.04配置adb后提示No such file or directory

    配置好SDK的环境变量后,输入adb提示 No such file or directory. 原因:由于是64位的linux系统,而Android SDK只有32位的,需要安装一些支持包才能使用 1 ...

  8. django—中间件相关

    中间件 django的中间件是一个全局范围内处理django的请求和响应的框架级别的钩子. 作用:对于一个请求到达视图函数的前后进行处理 本质:中间件的本质是一个类,类中定义了特定的方法,Django ...

  9. pv操作是否会造成死锁呢?

    看了一些pv操作的例子,有一些基本原理不是想得很清楚. 有一个进程 while(true) { p(s); ...... v(s); } s的初值为1. 那么我的问题是,当多个该进程需要执行时,是否会 ...

  10. mysql 架构简介

    mysql的逻辑架构 第一层:进行连接处理.权限认证.安全校验等. 当客户端(应用)连接到mysql服务器时,服务器会创建使用一个线程进行处理连接(少量的线程服务大量的连接),随后服务器需要对该连接进 ...