多线程 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 ...
随机推荐
- Hanoi II——汉诺塔步数求解进阶问题
在NOJ上遇到关于汉诺塔步数的求解问题 开始读时一脸懵逼,甚至不知道输入的数据是什么意思 题目描述:给出汉诺塔的两个状态,从初始状态移动到目的状态所需要的最少步数 对于初级汉诺塔步数问题,我们可以直接 ...
- 【数据库开发】C++测试redis中的publish/subscribe
运用 http://blog.csdn.net/xumaojun/article/details/51558237 中的redis_publisher.hredis_publisher.cpp red ...
- Nuget下载 MySql.Data 连接MySql数据库
打开VS项目,右键项目选择 右上角搜索框中搜索 MySql.Data 然后可以选择安装,但是可能会出现这个提示 这是因为版本的问题,所以,自己去官网重新下载,我这里选择的是这个版本, 官网地址: ht ...
- subplot()一个窗口画多个图
import matplotlib.pyplot as plt plt.subplot(m,n,p) m,n表示一个窗口上显示m行n列 p表示正在处理第p个区域的部分(区域编号从左到右,从上到下) f ...
- 《Tsinghua os mooc》第17~20讲 同步互斥、信号量、管程、死锁
第十七讲 同步互斥 进程并发执行 好处1:共享资源.比如:多个用户使用同一台计算机. 好处2:加速.I/O操作和CPU计算可以重叠(并行). 好处3:模块化. 将大程序分解成小程序.以编译为例,gcc ...
- 阿里云RocketMQ的生产者简单实现
// MQ的应用场景有比如 订单变更消息可以通过产生这个事件的地方(比如前端调用后端的接口post一个订单,那么就是在这个mapping方法里做一个生产者[不过最好通过aop来实现,不然n多个接口都要 ...
- Django之Form与ModelForm组件
Django之Form与ModelForm组件 1.Form介绍 Form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 O 保留上次的输入内容 普通方式手写注册功能 vi ...
- python-django-天天生鲜项目
1 需求分析 github源码:https://www.github.com/wangyingchuang/dailyfresh 1.1 用户模块 1) 注册页 l 注册时校验用户名是否已被注册. ...
- Unity插件研究-EasyTouch V5
抽空研究了下Easy Touch 5插件,发现确实很好用,下面是相应的用法: 1. Easy Touch Controls:实现虚拟摇杆的组件 在项目的"Hierarchy"窗口下 ...
- vue-cli中eslint配置
在项目目录下找到.eslintrc.js文件,使用编辑器打开进行编辑.在rules下添加space-before-function-paren.space-before-blocks.及semi的配置 ...