python-day37(正式学习)
前景回顾
抢票系统的代码优化,使用了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(正式学习)的更多相关文章
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- 从Theano到Lasagne:基于Python的深度学习的框架和库
从Theano到Lasagne:基于Python的深度学习的框架和库 摘要:最近,深度神经网络以“Deep Dreams”形式在网站中如雨后春笋般出现,或是像谷歌研究原创论文中描述的那样:Incept ...
- Comprehensive learning path – Data Science in Python深入学习路径-使用python数据中学习
http://blog.csdn.net/pipisorry/article/details/44245575 关于怎么学习python,并将python用于数据科学.数据分析.机器学习中的一篇非常好 ...
- (转载)Python装饰器学习
转载出处:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方 ...
- 正式学习React(五) react-redux源码分析
磨刀不误砍柴工,咱先把react-redux里的工具函数分析一下: 源码点这里 shallowEqual.js export default function shallowEqual(objA, ...
- 正式学习React(一) 开始学习之前必读
为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- Python装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 ? 1 2 3 4 5 6 7 8 # -*- ...
- Python的基础学习(第二周)
模块初始 sys模块 import sys sys.path #打印环境变量 sys.argv#打印该文件路径 #注意:该文件名字不能跟导入模块名字相同 os模块 import os cmd_res ...
随机推荐
- CF1216E Numerical Sequence
题目链接 问题分析 奇奇怪怪的题... 首先思路达成一致,从大到小一步一步确定位置. 我们一边分析,一边讲算法. 1121231234123451234561234567123456781234567 ...
- 2.nohup和&后台运行,进程查看及终止
1.nohup和& 语法:nohup Command [ Arg … ] [& ] nohup:不挂断地运行命令 &:在后台运行 示例:nohup java -jar app2 ...
- css基础(浮动 清除f浮动)
文档流(标准流) 1.元素自上而下,自左而右 2.块元素,独占一行,行内元素在一行上显示,碰到父级元素的边框换行 浮动left 浮动的框可以向左或是向右移动,直到它的边缘碰到包含框或是另个浮动框 ...
- 「Luogu P5602」小E与美食
题目链接 戳我 \(Solution\) 这道题只需要枚举吃\(k\)个美食,最后在取前\(k\)大的美味值.对于每个算出答案后取\(max\) \(Code\) #include<bits/s ...
- 安装vncserver, vncviewer--远程桌面
1 问题如下 /etc/sysconfig/vncservers---配置文件作用去掉最后两行的注释 no route to host 是防火墙的原因---必须得研究好防火墙 本地可以vnc,本地 ...
- vim 软件
1. 安装vim 2. 使用vim 操作模式: 1. 一般模式 ,默认进入的一般模式,该模式不能编辑文档 ,只能查看 按 i(insert) ...
- 自定义圆形图片控件CircleImageView的实现
package com.loaderman.circleimageviewdemo; import android.content.Context; import android.content.re ...
- 批量替换word内容
有一个需求需要把word中的一段文档的编号批量替换 如,把133-183批量的替换成31-81,需要批量的替换word,脚本如下 from docx import Document import os ...
- iOS 应用"无法安装应用程序 因为证书无效"的解决方案
原因是由于iOS7.1要安装企业应用,url必须是https的,不能是http,这就要求我们的服务器要支持https.因此,只要将原链接: itms-services://?action=downlo ...
- .NET GC简单理解
内存分配 计算对象大小. 添加对象指针和同步索引块. 从内存指针处开始,分配对象内存. 问题:内存不能无限制增长. 垃圾回收 从应用程序实例出发,标记所有的引用对象. 将标记对象移动到低地址端,修正实 ...