多线程 multiprocessing 的几个小例子
1、Pipe
- import multiprocessing as multip,time
- from multiprocessing import Process,Pipe,Event,Condition,Lock,Pool,Value,Array
- def pipe1(pipe):
- pipe.send('hello')
- print('p1.recv1',pipe.recv())
- pipe.send('what is your name??')
- print('p1.recv2',pipe.recv())
- def pipe2(pipe):
- print('p2.recv1',pipe.recv())
- pipe.send('hello,too')
- print('p2.recv2',pipe.recv())
- pipe.send('i do not tell you!!')
- if __name__=='__main__':
- pipe=Pipe()
- p1=Process(target=pipe1,args=(pipe[0],))
- p2=Process(target=pipe2,args=(pipe[1],))
- p1.start()
- p2.start()
- #p1.join()
- #p2.join()
- print('主程序结束运行')
2、Event
- def event1(e):
- print('event1 开始运行:')
- e.wait()
- print('event1 等待结束:')
- def event2(e,t):
- print('event2 开始运行:')
- e.wait(t)
- print('event2 等待超时结束:')
- e.set()
- if __name__=='__main__':
- e=Event()
- p1=Process(target=event1,args=(e,))
- p2=Process(target=event2,args=(e,4))
- p1.start()
- p2.start()
- time.sleep(3)
- print('主程序运行结束!')
3、Condition
- def cond1(cond):
- with cond:
- print('cond1 开始运行',multip.current_process().name)
- cond.wait()
- print('cond1 等待结束',multip.current_process().name)
- def cond2_notify(cond):
- with cond:
- print('cond2 开始运行',multip.current_process().name)
- cond.notify_all()#notify() 只通知一个等待的condition
- print('cond2 notifyall结束',multip.current_process().name)
- if __name__=='__main__':
- con=Condition()
- p1=Process(target=cond1,args=(con,))
- p2=Process(target=cond1,args=(con,))
- p3=Process(target=cond2_notify,args=(con,))
- p1.start()
- p2.start()
- time.sleep(4)
- p3.start()
- time.sleep(3)
- print('主程序运行结束!')
4、Lock
- def func(lock):
- #def func():
- lock.acquire()
- print('进程锁之后开始运行:',multip.current_process().name)
- time.sleep(2)
- print('下面释放进程锁:',multip.current_process().name)
- lock.release()
- if __name__=='__main__':
- lock=Lock()
- for i in range(10):
- p1=Process(target=func,args=(lock,))
- p1.start()
- time.sleep(3)
- print('主程序运行结束!')
5、Pool
- def func(n):
- time.sleep(0.2)
- return n**2
- if __name__=='__main__':
- pool=Pool(3)
- ll=list(range(10))
- result=pool.map(func,ll)
- print('result:',result)
6、进程间共享变量 (后面补充)
- class Counter():
- def __init__(self,ini=0):
- self.val=Value('i',ini)
- self.lock=Lock()
- def increment(self):
- with self.lock:
- self.val.value+=1
- print('共享变量val自增1次:',self.value())#在调用value()时,如果2个锁重叠,可能会死锁
- def value(self):
- #with self.lock:
- return self.val.value
- def func(counter):
- for i in range(5):
- time.sleep(0.01)
- counter.increment()
- if __name__=='__main__':
- counter=Counter(0)
- ps=[Process(target=func,args=(counter,)) for i in range(5)]
- for i in ps:
- i.start()
- for i in ps:
- i.join()
- print('counter.value():',counter.value())
多线程 multiprocessing 的几个小例子的更多相关文章
- Java多线程分批发送消息的小例子
需求: 假设有10万个用户,现在节假日做活动,需要给每个用户发送一条活动短信,为了提高程序的效率,建议使用多线程分批发送. 这里值得注意的是: 每开一个线程都会占用CPU的资源,所以线程根据所需要的条 ...
- c# BackGroundWorker 多线程操作的小例子
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...
- c# BackGroundWorker 多线程操作的小例子 (转)
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...
- [Python 多线程] multiprocessing、多进程、工作进程池 (十四)
由于Python的GIL限制,多线程未必是CPU密集型程序的好的选择. 多进程可以完全独立的进程环境中运行程序,可以充分地利用多处理器. 但是进程本身的隔离性带来的数据不共享也是一个问题.而且线程比进 ...
- WebService小例子———
WebService学习(刚开始) ———————————————————————————————————————————————————————————————————— WebService:跨平 ...
- 关键字Lock的简单小例子
一.什么是Lock? Lock——字面上理解就是锁上:锁住:把……锁起来的意思: 为什么要锁?要锁干什么?——回到现实中可想象到,这个卫生间我要上,其他人不要进来!(所以我要锁住门):又或者土味情话所 ...
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
随机推荐
- 火狐低版本中显示时间格式为:yyyy-MM-dd hh:mm:ss,出现NaN
在低版本的火狐(43以下)和IE8中,显示时间格式为:yyyy-MM-dd hh:mm:ss,会出现NaN:原因是只支持yyyy/MM/dd hh:mm:ss; 所以在new Date('2018-0 ...
- 学习JavaScript之this,call,apply(转)
转自: http://www.h5cn.com/js/jishu/2016/0128/17884.html 在之前的JavaScript学习中,this,call,apply总是让我感到迷惑,但是他们 ...
- 微信小程序的网络重试机制
最近在开发微信小程序, 在测试时, 总能碰到一些诸如网络被打断啊之类的问题. 小程序是一款实时互动的小程序, 基于一系列原因, 没有使用Socket, 而是使用的是长链接. 所以对这类问题不能大意啊, ...
- java输入输出 -- Java NIO之套接字通道
一.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 – 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Be ...
- FishingMaster(HDU-6709)【贪心】
题目链接:https://vjudge.net/problem/HDU-6709 题意:一个人要抓n条鱼,每抓一条鱼用时K,每烹饪一条鱼用时a[i],抓鱼的过程不能被打断,烹饪鱼的时候可以抓鱼,也可以 ...
- Laravel安装和composer安装
下载地址:https://getcomposer.org/download/ 他会自动找到你的php目录,如果没有记得手动修改 一直点下一步,即可. 如果安装不成功,可能是之前安装过composer ...
- Excel关联匹配函数
1.=VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup]) lookup_value 相当于python中的键,用来 ...
- python笔记007-函数
昨日简要: 1.文件操作: 1.1获得句柄: f = open(‘one.txt’,mode=’’,encoding=’utf-8’) f = open(‘../’) à返回上一层 f = open( ...
- 20191011-构建我们公司自己的自动化接口测试框架-Util的getTestSuite模块
getTestSuite主要是用于在testData里面获取测试集以及对应的测试数据,包括2个主要的方法,一个是获取测试集,一个是获取测试集里面要执行的测试用例 获取测试集方法: from Util. ...
- c++学习总结(一)------类结构学习
基类的构造函数并没有被派生类继承 析构函数和拷贝赋值操作符同样也没有 类的设计者通过把成员函数声明为 const 以表明它们不修改类对象 把一个修改类数据成员的函数声明为 const 是非法的 (51 ...