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. 【转】git2.9.2使用总结

    git2.9.2使用总结 1.系统:Windows7 2.git版本:2.9.2 由于我的git版本是最新版,后面我出现的坑就是最新版本的问题. 3.托管环境:开源中国的码云 . 使用步骤 1.在码云 ...

  2. 作为linux新手需掌握的常用命令大全

    学了几周的linux系统,接触最多的就是各种各样的命令,此篇随笔作为对之前所学的各中命令的整理扩展. 1.man命令 man命令作为第一个要学的Linux命令是因为它的作用非常强大——可用于查看命令的 ...

  3. CVE-2019-0708 RDP MSF漏洞利用

    CVE-2019-0708 RDP MSF漏洞复现 漏洞环境 使用 VMware 安装Windows7 X64 模拟受害机 Windows7 X64下载链接:链接: https://pan.baidu ...

  4. 基于tesseract-OCR进行中文识别

    1. 环境准备 1.1 下载 下载Tesseract-OCR安装包,地址为: https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w32- ...

  5. jenkins sonarqube 代码检测部署

    install pgsql and sonarqube docker run --name postgresqldb -e POSTGRES_USER=sonar -e POSTGRES_PASSWO ...

  6. Python中操作mysql的pymysql模块详解(转载)

    https://www.cnblogs.com/wt11/p/6141225.html

  7. jacascript Date 学习

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! Date dateObject.getDate();  返回一个月中的某一天(1-31) dateObje ...

  8. JS OOP -03 JS类的实现

    JS类的实现: a.理解类的实现机制 b.使用prototype对象定义类成员 c.一种JS类的设计模式 a.理解类的实现机制 在JS中可以使用function关键字来定义一个类. 添加类的成员,在函 ...

  9. webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义解决办法

    webAPI中“System.Web.Http.HttpConfiguration”不包含“EnableSystemDiagnosticsTracing”的定义 今天从 运行 WebAPI 工程的代码 ...

  10. ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2 视图模板页

    https://www.cnblogs.com/xlhblogs/archive/2013/06/09/3129449.html MVC Razor模板引擎 @RenderBody.@RenderPa ...