多线程 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 ...
随机推荐
- java面试准备策略
我将结合网络教学视频,根据java以下几个特性进行学习. 平台无关性 GC 语言特性 面向对象 类库 异常处理
- Qt598x64vs2017.跨线程传递std::string
1.Qt编译的时候 提示 str::string 需要在main(...)中注册什么的(大概是这个意思,记不清了),于是 在main(...)中调用了 “qRegisterMetaType<st ...
- Temporal IR (Chapter3 -Temporal Infroamtion Extraction)
不管是文档,还是查询中,都显式或者隐式地包含了可以被利用的时间信息. 提取出来的时间信息可以用作构成“时间简历”(temporal profile)用于多种对象,比如实体和事件. 在时间信息中,最容易 ...
- Nginx 413 Request Entity Too Large
用户上传图片的时候,报错. 发现,原来是图片太大导致. 咦?后台配置图片支持5M啊? 哦!原来是Nginx配置问题. Nginx默认支持1M的POST数据! 修改Nginx配置! 修改nginx.co ...
- plsql中文乱码 显示问号
输入sql语句select * from V$NLS_PARAMETERS查看字符集,查看第一行value值是否为简体中文 解决方案: 新增环境变量 变量名: NLS_LANG 变量值: SIMPLI ...
- keras损失函数详解
以下信息均来自官网 ------------------------------------------------------------------------------------------ ...
- 【规律】Farey Sums
[参考博客]: https://blog.csdn.net/meopass/article/details/82952087 Farey Sums 题目描述 Given a positive inte ...
- BM算法解析(计算机算法-设计与分析导论(第三版))
转载请声明
- prometheus+grafana监控nginx
被监控机器环境搭建&配置 nginx-module-vts下载: https://github.com/vozlt/nginx-module-vts nginx-module-vts安装 un ...
- (一)第一个python语句、乘除法、获取用户输入、函数
一.print语句 >>> print "hello World!!" python2 和python3 的print是不一样的,python3的print(“h ...