python之 《进程之间数据交互和进程池》
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之 《进程之间数据交互和进程池》的更多相关文章
- Python利用pandas处理Excel数据的应用
Python利用pandas处理Excel数据的应用 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集
这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
- 基于 Python 和 Pandas 的数据分析(1)
基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...
- python安装pandas和lxml
一.安装python 二.安装pip 三.安装mysql-connector(window版):下载mysql-connector-python-2.1.3,解压后进入目录,命令安装:pip inst ...
- python之pandas用法大全
python之pandas用法大全 更新时间:2018年03月13日 15:02:28 投稿:wdc 我要评论 本文讲解了python的pandas基本用法,大家可以参考下 一.生成数据表1.首先导入 ...
- python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...
- Python数据分析--Pandas知识点(二)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...
- Python之Pandas中Series、DataFrame
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
随机推荐
- Git的介绍以及安装
Git的简单介绍 Git是一个开源的分布式版本控制系统,可以有效,高速的处理从很小到非常大的项目管理,GIT是为了帮助linux内核开发而开发的一个开放源码的版本控制软件 Git的安装 Linux平台 ...
- day33 Pyhton 常用模块03
一.正则表达式: 1.元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线 \s 匹配任意的空白符 \d 匹配数字 \n 匹配一个换行符 \t 匹配一个制表符 \b 匹配一个单词的结尾 ...
- 为什么大部分的程序员学编程,都会选择从C语言开始?
软件行业经过几十年的发展,编程语言的种类已经越来越多了,而且很多新的编程语言已经在这个领域从开始的默默无闻到如今风风火火,整个编程语言朝着集成化方向发展,这样会导致很多的初学者选择上不像以前那么单一了 ...
- 《我想进大厂》之Dubbo普普通通9问
这是面试专题系列第四篇,Dubbo系列.Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最 ...
- faker切换user-agent
import random import requests url = "http://tool.yeves.cn" import faker fake = faker.Faker ...
- centOS7永久关闭防火墙(防火墙的基本使用(转)
查看防火墙状态: systemctl status firewalld.service 如图 绿的running表示防火墙开启 执行关闭命令: systemctl stop firewalld.ser ...
- requirements基本使用
requirements作用描述:很多 Python 项目中经常会包含一个 requirements.txt 文件,里面内容是项目的依赖包及其对应版本号的信息列表,即项目依赖关系清单,其作用是用来重新 ...
- 骨架屏(page-skeleton-webpack-plugin)初探
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/2436173500265335 微信公众 ...
- 天猫精灵对接2(OAuth 搭建)
根据 接入方式及流程 中的说明,可知,搭建过程中,我们需要自己整一个 OAuth 的授权平台,具体说明可以参考蟋蟀大哥的文章 ASP.NET WebApi OWIN 实现 OAuth 2.0 ,我的 ...
- codevs1298, hdu1392 (凸包模板)
题意: 求凸包周长. 总结: 测试模板. 代码: #include <iostream> #include <cstdio> #include <cstring> ...