多线程 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 ...
随机推荐
- Linear regression with one variable - Cost function
摘要: 本文是吴恩达 (Andrew Ng)老师<机器学习>课程,第二章<单变量线性回归>中第7课时<代价函数>的视频原文字幕.为本人在视频学习过程中逐字逐句记录下 ...
- 最新 美柚java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 美柚等10家互联网公司的校招Offer,因为某些自身原因最终选择了 美柚.6.7月主要是做系统复习.项目复盘.LeetCo ...
- CenOS 7 安装JDK
1.输入安装命令 yum install java-1.8.0-openjdk-devel.x86_64
- idea用maven创建web项目(详细)
引用:http://blog.csdn.net/u010361662/article/details/50605099 欢迎添加微信
- js 实现数字格式化(货币格式)几种方法
// 方法一 function toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split( ...
- python map函数(23)
截至到目前为止,其实我们已经接触了不少的python内置函数,而map函数也是其中之一,map函数是根据指定函数对指定序列做映射,在开发中使用map函数也是有效提高程序运行效率的办法之一. 一.语法定 ...
- layer弹出层,结合art-template实现弹出编辑
模板 <!-- 模板 --> <script id="render-tpl" type="text/html"> <div cla ...
- Win10 彻底关闭 Windows Defender
1.使用快捷键 WIN+R 调出运行工具,然后再输入组策略命令 gpedit.msc 再点击确定. 2.进入组策略在计算机配置下面的管理模板,Windows 组件就可以看到 Windows Defen ...
- 题目21 包含Min函数的栈
///////////////////////////////////////////////////////////////////////////////////// // 3. 题目21 包含 ...
- 模块 json 和 pickle
目录 序列化 json 和 pickle 模块 序列化 序列:字符串 序列化:将其它数据类型转换成字符串的过程. 反序列化:字符串转成其它数据类型. 序列化的目的 1:以某种存储形式使用自定义对象持久 ...