前景回顾

抢票系统的代码优化,使用了Lock类

from multiprocessing import Process,Lock
import os,time,json with open('user', 'w', encoding='utf-8')as f:
dic={'count':2}
json.dump(dic,f) def search():
with open('user','r',encoding='utf-8')as f:
data=json.load(f)
print(data.get('count')) def get():
with open('user','r',encoding='utf-8')as f:
data = json.load(f)
if data['count'] > 0:
data['count'] -= 1
with open('user','w',encoding='utf-8')as f:
json.dump(data,f)
print('success')
time.sleep(1)
else:
print('票已售空')
def piao(lock):
search()
lock.acquire()
get()
lock.release() if __name__ == '__main__':
lock=Lock()
for i in range(5):
p=Process(target=piao,args=(lock,))
p.start()

队列

1

from multiprocessing import Queue,Process

q=Queue()
q.put(1)
print(q)
data=q.get()
print(data)
data=q.get()
print(data) #默认会一直等待拿值
q.put(5)

2

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5) #此处队列满了,就会成阻塞状态
q.get()
q.get()

3

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.put(5)
q.put(5)
q.put(5)
q.put(5,block=True,timeout=3) #此处队列满了,就会成阻塞状态,block为等待状态,timeout为等待时间,等不到就报错
q.get()
q.get()

4

from multiprocessing import Queue,Process

q=Queue(4)
q.put(1)
q.get()
q.get(block=True,timeout=3) #队列已被取空,此时再取就会阻塞,block为阻塞状态,timeout为阻塞时间

5

from multiprocessing import Queue,Process

q=Queue(1)
q.put(1)
q.put_nowait(5) #队列已满,此时再存就会阻塞,相当于put的默认block为False

生产者消费者模型

版本一

from multiprocessing import Queue,Process
import time def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'{name}生产了{msg+str(i)}')
time.sleep(1)
q.put(None) #用None来终止消费者 def cost(q,name):
while True:
msg=q.get()
if msg==None:
break
print(f'{name}吃了{msg}')
time.sleep(1) if __name__ == '__main__':
q=Queue()
p1=Process(target=produce,args=(q,'wind','card'))
p2=Process(target=produce,args=(q,'nick','niunai'))
# p1=Process(target=Process,args=(q,'wind','card'))
c1=Process(target=cost,args=(q,'chanyuli'))
c2=Process(target=cost,args=(q,'zhongshifu'))
p1.start()
p2.start()
c1.start()
c2.start()

版本二

from multiprocessing import Queue,Process,JoinableQueue
import time def produce(q,name,msg):
for i in range(3):
q.put(msg+str(i))
print(f'{name}生产了{msg+str(i)}')
time.sleep(1) def cost(q,name):
while True:
msg=q.get()
q.task_done()
if msg==None:
break
print(f'{name}吃了{msg}')
time.sleep(1) if __name__ == '__main__':
q=JoinableQueue()
p1=Process(target=produce,args=(q,'wind','card'))
p2=Process(target=produce,args=(q,'nick','niunai'))
# p1=Process(target=Process,args=(q,'wind','card'))
c1=Process(target=cost,args=(q,'chanyuli'))
c2=Process(target=cost,args=(q,'zhongshifu'))
c1.daemon=True
c2.daemon=True
p1.start()
p2.start()
c1.start()
c2.start()
p1.join()
p2.join()
q.join()

python-day37(正式学习)的更多相关文章

  1. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  2. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

  3. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...

  4. Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习

    http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...

  5. (转载)Python装饰器学习

    转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...

  6. 正式学习React(五) react-redux源码分析

    磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里  shallowEqual.js export default function shallowEqual(objA, ...

  7. 正式学习React(一) 开始学习之前必读

    为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...

  8. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  9. Python装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...

  10. Python的基础学习(第二周)

    模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...

随机推荐

  1. Spring Boot教程(四十二)LDAP来管理用户信息(2)

    使用spring-data-ldap的基础用法,定义LDAP中属性与我们Java中定义实体的关系映射以及对应的Repository @Data @Entry(base = "ou=peopl ...

  2. Keras学习笔记一:修改数据读入方式为本地图片读入

    第一种方法: Keras官方给的图片去噪示例要自动下载mnist数据集并处理,不能修改和加入自己的数据集. from keras.datasets import mnist (x_train, _), ...

  3. 【面试】Redis

    1.如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样? set指令有非常复杂的参数,这个应该是可以同时setnx和expire合成一条指令来用的! 2.使用过Re ...

  4. mysql 数据库备份 -- (定时任务)

    场景: 我们经常需要对数据库备份 方式一:mysql 数据备份方式 在linux 备份方式  通常采用 mysqldump -uroot -ppassword  --database 数据库名 > ...

  5. HotSpot VM的堆结构

    主要三个空间:young代.old代.permanent代. young代:当Java应用分配Java对象时,分配到young代. old代:经历过几次minor GC之后,如果对象还存活,就会被转移 ...

  6. koa 基础(十五)cookie 设置中文

    1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...

  7. python全栈开发第6天

    作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...

  8. 编译openwrt时报错build_dir/hostpkg/libubox-2018-07-25-c83a84af/blobmsg_json.c:21:19: fatal error: json.h: No such file or directory

    答: 一. 详细日志: build_dir/hostpkg/libubox-2018-07-25-c83a84af/blobmsg_json.c:21:19: fatal error: json.h: ...

  9. 凸包Graham Scan算法实现

    凸包算法实现点集合中搜索凸包顶点的功能,可以处理共线情况,可以输出共线点也可以不输出而只输出凸包顶点.经典的Graham Scan算法,点排序使用极角排序方式,并对共线情况做特殊处理.一般算法是将共线 ...

  10. 非监督的降维算法--PCA

    PCA是一种非监督学习算法,它能够在保留大多数有用信息的情况下,有效降低数据纬度. 它主要应用在以下三个方面: 1. 提升算法速度 2. 压缩数据,减小内存.硬盘空间的消耗 3. 图示化数据,将高纬数 ...