当前位置: 首页 > 编程日记 > 正文

Python多进程与进程锁的基本使用

Python的multiprocessing模块提供了多种进程间通信的方式,如Queue、Pipe等。

Queue是multiprocessing提供的一个模块,它的数据结构就是"FIFO——first in first out"的队列,常用的方法有:put(object)入队;get()出队;empty()判断队列是否为空。Lock:当多个子进程对同一个queue执行写操作时,为了避免并发操作产生冲突,可以通过加锁的方式使得某个子进程对queue拥有唯一的写权限,其他子进程必须等待该锁释放后才能再开始执行写操作。

下面就是使用Queue进行进程间通信的代码:在父进程里创建两个子进程,分别实现对queue的读和写操作:

#!/usr/bin/python
# -*- coding: utf-8 -*
__author__ = 'zni.feng'
import  sys
reload (sys)
sys.setdefaultencoding('utf-8')
from multiprocessing import Process, Queue, Lock
import os, time, random
#写数据进程
def write(q, lock, name):print 'Child Process %s starts' % name#获得锁lock.acquire()for value in ['A' , 'B', 'C']:print 'Put %s to queue...' % valueq.put(value)time.sleep(random.random())#释放锁lock.release()print 'Child Process %s ends' % name#读数据进程
def read(q, lock, name):print 'Child Process %s starts' % namewhile True: #持续地读取q中的数据value =q.get()print 'Get %s from queue.' % valueprint 'Child Process %s ends' % nameif __name__ == "__main__":#父进程创建queue,并共享给各个子进程q= Queue()#创建锁lock = Lock()#创建第一个“写”子进程pw = Process(target = write , args=(q, lock, 'WRITE', ))#创建“读”进程pr = Process(target = read, args=(q,lock, 'READ',))#启动子进程pw,写入:pw.start()#启动子进程pr,读取:pr.start()#等待pw结束:pw.join()#pr是个死循环,通过terminate杀死:pr.terminate()print 'Test finish.'

运行结果:

Child Process WRITE starts
Put A to queue...
Child Process READ starts
Get A from queue.
Put B to queue...
Get B from queue.
Put C to queue...
Get C from queue.
Child Process WRITE ends
Test finish.
[Finished in 2.0s]Pipe是另一种进程间通信的方式,俗称“管道”。它由两端组成,一端往管道里写入数据,另一端从管道里读取数据。

下面就是使用Pipe通信的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*
__author__ = 'zni.feng'
import  sys
reload (sys)
sys.setdefaultencoding('utf-8')
from multiprocessing import Process, Pipe
import os, time, random#发送数据进程
def send(child_pipe, name):print 'Child Process %s starts' % namechild_pipe.send('This is Mr.Ni')child_pipe.close()time.sleep(random.random())print 'Child Process %s ends' % name#接收数据进程
def recv(parent_pipe, name):print 'Child Process %s starts' % nameprint parent_pipe.recv()time.sleep(random.random())print 'Child Process %s ends' % nameif __name__ == "__main__":#创建管道parent,child = Pipe()#创建send进程ps = Process(target=send, args=(child, 'SEND'))#创建recv进程pr = Process(target=recv, args=(parent, 'RECEIVE'))#启动send进程ps.start()#等待send进程结束ps.join()#启动recv进程pr.start()#等待recv进程结束pr.join()print 'Test finish.'

运行结果:

Child Process SEND starts
Child Process SEND ends
Child Process RECEIVE starts
This is Mr.Ni
Child Process RECEIVE ends
Test finish.
[Finished in 1.8s]

相关文章:

[容易]比较字符串

题目来源:http://www.lintcode.com/zh-cn/problem/compare-strings/ 先贴上错误代码,测试案例没有全部通过。不一定是顺序的。 1 class Solution {2 public:3 /**4 * param A: A string includes Upper Case letters5 * param B: A string…

iOS 一行命令发布 Pod 框架

作者 ripperhe 关注 2017.03.30 23:38* 字数 5589 阅读 27评论 0喜欢 2前言 目前比较流行的组件化开发,针对多个 app 要用同一套代码,将其做成 pod 仓库是比较好的解决方案。代码只有一份放在组件仓库,需要集成的 app 只需要将其 pod 到工程内…

[bbk4966]第70集 第8章 -性能维护 01

本章前言: 每秒钟,产生的日志文件多少,如果产生很多的redo log 信息,说明负荷量大差生的原因是DML操作太多. 假如oracle database 属于dedicate server,使用top session方式排查数据库性能问题,是比较适合的.根据SESSI…

Python中正则匹配与中文的问题

笔者改写了一个爬虫,来爬取补天SRC的漏洞认领页面,将单位名称、漏洞名称、漏洞危害等级爬取下来,但是在正则匹配"漏洞名称"的过程中遇到了一些麻烦。 如上图,想要把"SQL注入漏洞"字符串正则匹配出来&#xf…

项目/程序的流程走向

领导用户需求前景准备分析(OOA)设计(OOD)实现(OOP)测试部署发布跟踪维护升级新田月会|新细胞|君宁天下|htttp://www.xintianyuehui.cn 作者:宁骑 联系QQ:1075858260转载于:https://www.cnblogs.com/ncellit/p/5491828.html

使用 UIBezierPath 进行简单的图形绘制

这篇文章介绍UIBezierPath的详细的使用, 以及一些细节! 创建一个XTBezierPath继承于UIView的类 使用drawRect 完成图形的绘制 在drawRect方法完成绘制 使用 moveToPoint, addLineToPoint两个方法绘制一个任意多边形 其中w, h 代表自定义View的宽, 高 代码如下: // 初始化一个UI…

利用python实现IP扫描

需求:写一个脚本,判断192.168.11.0/24网络里,当前在线ip有哪些? 知识点: 1 使用subprocess模块,来调用系统命令,执行ping 192.168.11.xxx 命令 2 调用系统命令执行ping命令的时候,会有返回值…

EFQRCode:自动生成花式二维码

原文链接:https://github.com/EyreFree/EFQRCodeEFQRCode:自动生成花式二维码。# 为开源点赞# —— 由SwiftLanguage分享EFQRCode is a tool to generate QRCode UIImage or recognize QRCode from UIImage, in Swift. It is based on CIDetector and CI…

centos删除系统自带的httpd

centos删除系统自带的httpd 1、[rootlocalhost etc]# rpm -qa|grep httpd,查看与httpd相关软件包。 httpd-tools-2.2.15-15.el6.centos.i686 httpd-2.2.15-15.el6.centos.i686 www.2cto.com 2、然后删除httpd: [rootlocalhost etc]# rpm -e httpd 出现问…

[C#]ASP.NET MVC 3 在线学习资料

最近在研究如何把Twitter Bootstrap移植到ASP.NET MVC 3上,攒了点资料,先贴在之里,以后整理了写心得。 1. http://www.codeproject.com/Articles/404633/Transform-ASP-NET-MVC3-Default-Template-with-Twitt 这是一篇介绍如何把默认的ASP.NE…

域渗透提权之MS14-068

0x00 前言 在做渗透测试时,当遇到域环境,获取到一个域成员账号后,如果域控制器未打好补丁,则可以利用本文所提到的漏洞,快速获取到域控制器权限。笔者这里总结网上已有资料,加以描述,希望你能在…

iOS 高可控性日历基础组件 - SKCalendarView 的使用和实现思路的分享

阅读 61收藏 52017-04-02原文链接:http://www.jianshu.com/p/ce4c64a4d437SKCalendarView 是一个高可控性的日历基础组件,为了提高应用的自由度,默认只提供了日历部分的视图封装,但不涵盖切换月份按钮、年月分显示等非关键性控件&…

懒加载 字典转模型 自定义cell

1 懒加载: 1> 什么是懒加载? 懒加载又称为延时加载,即在系统调用的时候加载,如果系统不调用则不会加载.所谓的懒加载其实就是重写其 get 方法. 2> 特点:在使用懒加载的时候要先判断该方法是否已经存在,如果不存在则再进行实例化. 3> 优点: 不必将创建对象的方法都…

SQL GROUP BY 语句

合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。 GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。 SQL GROUP BY 语法 SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator valu…

docker如何push镜像到docker hub个人的仓库

docker如何push镜像到docker hub个人的仓库 step1——找到本地镜像的ID&#xff1a;docker imagesstep2——登陆Hub&#xff1a;docker login --usernameusername --passwordpassword --emailemailstep3——tag&#xff1a;docker tag <imageID> <namespace>/<…

博客开通第一天,加油

博客开通第一天&#xff0c;加油转载于:https://www.cnblogs.com/tianyang01/p/5499881.html

【iOS 开发】iOS 10.3 如何更换 app 图标

2017-04-06 KyrieXu Cocoa开发者社区iOS 10.3 开放了更换 app 图标的 API&#xff0c;核心方法是下面这个&#xff1a; func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? nil) 这是官方文档&#xff0c;但是你还需要在…

WordPress qTranslate插件跨站请求伪造漏洞

漏洞名称&#xff1a;WordPress qTranslate插件跨站请求伪造漏洞CNNVD编号&#xff1a;CNNVD-201306-058发布时间&#xff1a;2013-06-07更新时间&#xff1a;2013-06-07危害等级&#xff1a; 漏洞类型&#xff1a;跨站请求伪造威胁类型&#xff1a;远程CVE编号&#xff1a;CV…

ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

[vs2008]Visual Studio 2008 SP1添加或删除功能提示查找SQLSysClrTypes.msi文件

前言 今天接到领导布置的一个任务&#xff0c;是之前同事负责的项目。离职了&#xff0c;现在客户有些地方需要修改&#xff0c;由于我之前参与过&#xff0c;就落在我的头上了。 然后我就把代码弄了过来&#xff0c;打开发现其中需要用到水晶报表。&#xff08;我觉得不好用&a…

iOS10.3 的评论系统

作者 xuyafei86 关注 2017.03.30 12:39* 字数 428 阅读 265评论 4喜欢 11iOS10.3 对 App 的评论系统进行了较大的升级。主要在三个方面。 支持 App 内评分 在此之前我们要实现 App 内评分需要使用 SKStoreProductViewController。它只会在 App 内部模态打开在 AppStore 的详情页…

windows 内存泄露和资源泄漏调试

AQTime (有x64、win32的)进行内存泄露和资源泄漏监控http://wenku.baidu.com/view/9aa1c2afdd3383c4bb4cd2c1.html x64下载&#xff1a;http://downlite.net/lp.php?coc&nAutomatedQA.AQTime.v6.21.400.x64.Cracked.WORKING-BRD Windows Leaks Detector&#xff08;好象只…

ESXi6.5环境搭建(二:ESXi 6.5环境的安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

Android自定义ListView的Item无法响应OnItemClick的解决办法

转&#xff1a;如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话&#xff0c;那么默认focus是交给了子控件&#xff0c;而ListView的Item能被选中的基础是它能获取Focus&#xff0c;也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置…

iPA 打包小工具

2017-04-07原文链接&#xff1a;http://icofans.com/2017/04/06/%E6%A1%8C%E9%9D%A2%E6%89%93%E5%8C%85IPA%E5%B0%8F%E7%A8%8B%E5%BA%8F/对项目进行 iPA 打包导出 使用方法&#xff1a;运行后&#xff0c;将项目文件夹拖拽至主界面&#xff0c;此时项目便开始打包。打包完成后会…

ESXi6.5环境搭建(三:vSphere Client6.0安装)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…

JavaScript arguments对象

1、在JavaScript中&#xff0c;arguments对象是比较特别的一个对象&#xff0c;实际上是当前函数的一个内置属性。arguments非常类似Array&#xff0c;但实际上又不是一个Array实例。可以通过如下代码得以证实&#xff08;当然&#xff0c;实际上&#xff0c;在函数funcArg中&a…

iOS开发之 - 好玩的富文本

周末闲着没事&#xff0c;就想着不如把那些容易遗忘的知识点整理一下&#xff0c;一来可以让有需要的朋友少走弯路&#xff0c;二来自己以后再忘记的时候也可以回头看看......但 iOS 中小冷易忘的知识点实在太多了&#xff0c;不知道该从哪里开始整理&#xff0c;“百无聊赖”逛…

sharepoint自带JS函数获取URL参数

GetUrlKeyValue 转载于:https://www.cnblogs.com/bmib/p/3139749.html

ESXi6.5环境搭建(四:虚拟机操作系统安装及配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中ESXI6.5平台的安装及网络环境配置&#xff1b;完成VMware vSphere Client 6.0软件在PC端的安装及配置&#xff1b;完成使用浏览器或者VMware vSphere Client 6.0中对ESXI6.5的操…