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 的几个小例子的更多相关文章

  1. Java多线程分批发送消息的小例子

    需求: 假设有10万个用户,现在节假日做活动,需要给每个用户发送一条活动短信,为了提高程序的效率,建议使用多线程分批发送. 这里值得注意的是: 每开一个线程都会占用CPU的资源,所以线程根据所需要的条 ...

  2. c# BackGroundWorker 多线程操作的小例子

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  3. c# BackGroundWorker 多线程操作的小例子 (转)

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...

  4. [Python 多线程] multiprocessing、多进程、工作进程池 (十四)

    由于Python的GIL限制,多线程未必是CPU密集型程序的好的选择. 多进程可以完全独立的进程环境中运行程序,可以充分地利用多处理器. 但是进程本身的隔离性带来的数据不共享也是一个问题.而且线程比进 ...

  5. WebService小例子———

    WebService学习(刚开始) ———————————————————————————————————————————————————————————————————— WebService:跨平 ...

  6. 关键字Lock的简单小例子

    一.什么是Lock? Lock——字面上理解就是锁上:锁住:把……锁起来的意思: 为什么要锁?要锁干什么?——回到现实中可想象到,这个卫生间我要上,其他人不要进来!(所以我要锁住门):又或者土味情话所 ...

  7. springmvc入门的第一个小例子

    今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...

  8. java即时通信小例子

    学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...

  9. Runtime的几个小例子(含Demo)

    一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.)           1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);  [runti ...

随机推荐

  1. 金仓Kingbase数据库网页数据维护分析工具

    金仓Kingbase是优秀的国产数据库产品,在能源,政务,国防等领域广泛使用, 现在TreeSoft数据库管理系统已支持Kingbase了,直接在浏览器中就可以操作查看Kingbase数据了,十分方便 ...

  2. 配置Linux描述网络安全CIA模型之可用性案例

    在Linux中防御SYN型DOS攻击的方法比较常见的有: 1.增大队列SYN最大半链接数 2.利用SYN cookie技术   下面分别进行分析. 1.增大队列SYN最大半连接数 在LINUX中执行命 ...

  3. utf8 gbk 互转

    public static function utf8_to_gbk($utfstr) { return iconv("utf-8", "gbk//IGNORE" ...

  4. 移动架构-MVVM框架

    MVVM是Model-View-ViewModel的简写.它本质上就是MVC 的改进版.MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开 MVVM的优点 可重用性 ...

  5. Spring 使用单选按钮

    模型层需要提供数据选项,设置错误信息 关键代码 @NotNull(message = "请选择性别") private String gender; 控制器层需要在显示视图前,通过 ...

  6. C语言获取当前系统时间

    原文链接:https://blog.csdn.net/yuec1998/article/details/79883318 #include<stdio.h>#include<time ...

  7. 封装一个Model或者Vender类

    Model <?php /** * User: Eden * Date: 2019/3/21 * 共有内容 */ class WxPayModel extends Model { protect ...

  8. Android 8.1 MTK6739修改文档

    1. 信息-设置-通知-重要程度-中(不发出提示音),非锁屏界面下无提示通知框弹出 vendor/mediatek/proprietary/packages/apps/SystemUI/src/com ...

  9. Java基础---Java常量

    常量:在程序运行期间不变的量 分类: 类型  含义 数据举例 整数常量 所有整数 0,1, 567, -9 小数常量 所有小数 0.0, -0.1, 2.55 字符常量 单引号引起来,只能写一个字符, ...

  10. 题解 CF437C

    基本思路---贪心 既然要求最小代价,当用一定顺序删除时代价一定最小,不难发现,每次都删去x,y中最小的,最后的总代价业一定最小! 因此就可以写出下面的简单的代码 代码 #include<ios ...